Я пытаюсь получить текущую временную метку, то есть количество секунд, прошедших с 01.01.1970. Но похоже, что в ahk нет такой функции, как в некоторых языках. Я пытался провести исследование, но, похоже, нет другого способа сделать это, кроме как просто умножать и суммировать годы, месяцы, часы, минуты и секунды.
Итак, мой вопрос: как нам имитировать эту функцию в ahk? (Я не буду приводить пример кода, поскольку он здесь не имеет значения.)
Хотя в AutoHotkey нет встроенной функции для этого, вы можете реализовать это самостоятельно с помощью DateDiff.
Наивная реализация может выглядеть так:
epoch := "19700101000000"
diff := DateDiff(A_Now, epoch, "Seconds")
MsgBox(diff)
Однако важно помнить, что AutoHotkey DateDiff
использует местное время и ни при каких обстоятельствах не принимает никакой информации о часовом поясе. Поэтому, если это различие важно для вашего варианта использования, вам необходимо учитывать смещение местного времени. Это может выглядеть примерно так:
epoch := "19700101000000"
local_diff := DateDiff(A_Now, epoch, "Seconds")
utc_offset_seconds := DateDiff(A_Now, A_NowUTC, "Seconds")
unix_timestamp := local_diff - utc_offset_seconds
MsgBox(unix_timestamp)
В моем ограниченном тестировании это дает временную метку Unix, округленную до ближайшей секунды, и дает тот же результат, что и Python time.time
:
Также стоит отметить, что лучшее разрешение, которое вы можете получить за DateDiff
, — это секунды.
Просто добавьте и вызовите эти две функции, когда это необходимо:
#Requires AutoHotkey v2.0
/**
* @returns Current Unix time in milliseconds
*/
CurrentTimeMillis() => CurrentUnixTime() * 1000 + A_MSec
/**
* @returns Current Unix time in seconds
*/
CurrentUnixTime() => DateDiff(A_NowUTC, "1970", "s")
Наконец-то четкий ответ после старых сообщений на форуме.