Тема: AHK: Преобразовать дату и время в миллисекунды
Приветствую!
Есть дата и время, как форматировать их в миллисекунды?
date = 22.08.2016
time = 17:00
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Приветствую!
Есть дата и время, как форматировать их в миллисекунды?
date = 22.08.2016
time = 17:00
В милисекунды можно форматировать только период времени.
Мне нужно это для последующей обработки даты в Java, класс Date который хранит время в миллисекундах начиная с 1 января 1970 года. Вот это период и нужен.
Привет.
Возможно это сгодится.
Можно записать как:
UnixTime() {
;###############Convert YYYYMMDDHHMISS into Unix timestamp#############
time_orig=%A_NOW%
StringLeft, now_year, time_orig, 4
StringMid, now_month, time_orig, 5, 2
StringMid, now_day, time_orig, 7, 2
StringMid, now_hour, time_orig, 9, 2
StringMid, now_min, time_orig, 11, 2
StringRight, now_sec, time_orig, 2
;Get year seconds
year_sec := 31536000*(now_year - 1970)
;Determine how many leap days
leap_days := (now_year - 1972)/4 + 1
Transform, leap_days, Floor, %leap_days%
;Determine if date is in a leap year, and if the leap day has been yet
this_leap := now_year/4
Transform, this_leap_round, Floor, %this_leap%
If (this_leap = this_leap_round)
{
If now_month <= 2
leap_days-- ;subtracts 1 because this year's leap day hasn't been yet
}
leap_sec := leap_days*86400
;Determine fully completed months
If now_month = 01
month_sec = 0
If now_month = 02
month_sec = 2678400
If now_month = 03
month_sec = 5097600
If now_month = 04
month_sec = 7776000
If now_month = 05
month_sec = 10368000
If now_month = 06
month_sec = 13046400
If now_month = 07
month_sec = 15638400
If now_month = 08
month_sec = 18316800
If now_month = 09
month_sec = 20995200
If now_month = 10
month_sec = 23587200
If now_month = 11
month_sec = 26265600
If now_month = 12
month_sec = 28857600
;Determine fully completed days
day_sec := (now_day - 1)*86400
;Determine fully completed hours
hour_sec := now_hour*3600 ;don't subtract 1 because it starts at 0
;Determine fully completed minutes
min_sec := now_min*60
;Calculate total seconds
date_sec := year_sec + month_sec + day_sec + leap_sec + hour_sec + min_sec + now_sec
return date_sec
}
Тогда вызов:
totalSec:=UnixTime()
Передаст количество прошедших секунд с 1 января 1970 года. Умножаешь результат на 1000 и получаешь миллисекунды.
Не совсем понял. Тебе нужно системное время в миллисекунды отформатировать? Но как ты это представляешь? Например сейчас 12:00, ты запускаешь скрипт, а он выдает тебе 1200000000 миллисекунд, так (нолики в миллисекундах рандомные, потом точно сделаю)? Или тебе нужно отформатировать время относительно какой-то даты. Например: сколько миллисекунд прошло с 20:00 вчерашнего дня?
А в чем сложность-то?
time = 20160822170000
time -= 19700101000000,seconds
msgbox % time*1000
Нули в конце не нужны:
time = 2016082217
time -= 19700101, s
msgbox % time*1000
Или, если с изначальными переменными:
date = 22.08.2016
time = 17:00
RegExMatch(date, "(..)\.(..)\.(....)", match)
RegExMatch(time, "(..):(..)", found)
TimeStamp := match3 . match2 . match1 . found1 . found2
TimeStamp -= 19700101, S
MsgBox, % TimeStamp * 1000
time -= 19700101, s
0101 в конце не нужны:
date = 22.08.2016
time = 17:00
RegExMatch(date time, "(..)\.(..)\.(....)(..):(..)", match)
TimeStamp := match3 match2 match1 match4 match5
TimeStamp -= 1970, s
MsgBox, % TimeStamp * 1000
Да. Но я бы их всё равно писал, всё-таки значащие цифры, так понятнее.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться