1

Тема: AHK: FormatTime | Узнать дату из UnixTime

Добрый вечер, форумчане.
Возникла дилемма - от сервера приходит ответ JSON, в JSON ответе есть форма: {"timestamp":112121212} (пример). Так вот, возможно-ли через FormatTime перевести из Unix Time в нормальное время (например, в 12 апреля, 2017 год)?
Я не нашел параметра, чтобы можно был оз переменной извлекать дату.

2

Re: AHK: FormatTime | Узнать дату из UnixTime

Не совсем понятно, в чём вопрос, как из {"timestamp":112121212} получить 112121212, или как из 112121212 получить 21 июля 1973 года?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

3

Re: AHK: FormatTime | Узнать дату из UnixTime

Здравствуйте.


MsgBox,,Title,% DateFromUnix(112121212)

DateFromUnix(date) {
	cur := 19700101
	cur += date, s
	FormatTime, cDate, %cur%, yyyy.MM.dd HH:mm:ss
	return cDate
}

4

Re: AHK: FormatTime | Узнать дату из UnixTime

KusochekDobra, огромное Вам спасибо!

5 (изменено: ypppu, 2017-12-09 14:55:40)

Re: AHK: FormatTime | Узнать дату из UnixTime

teadrinker, 2 вариант, но на него мне уже ответили.

6

Re: AHK: FormatTime | Узнать дату из UnixTime

Перенесено.

oasis.developed пишет:

Добрый день.
В прошлой теме я просил помочь с FormatTime из Unix Time, мне скинули код:


DateFromUnix(date) {
	cur := 19700101
	cur += date, s
	FormatTime, cDate, %cur%, yyyy.MM.dd в HH:mm
	return cDate
}

Все работает, но!
Часы показывают на -3 часа по МСК, это составило проблему.
Решение: парсить с сервера JSON ответ, формат (на сервере время МСК):


{"response":{"status":false,"process_time":0.0007,"server_date":1509801654,"code":103}}

Я вывел server_date в переменную server_date, как мне теперь подставить в DateFromUnix, чтобы время всегда было по МСК?
Как я представляю:


DateFromUnix(date) {
	cur := server_date
	cur += date, s
	FormatTime, cDate, %cur%, yyyy.MM.dd в HH:mm
	return cDate
}

Но ничего не получается ;-(

7 (изменено: belyankin12, 2017-11-04 17:35:27)

Re: AHK: FormatTime | Узнать дату из UnixTime

Чему равна переменная server_date?

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

8 (изменено: ypppu, 2017-12-09 14:55:16)

Re: AHK: FormatTime | Узнать дату из UnixTime

belyankin12, она равна unix time: 1509803367.

9

Re: AHK: FormatTime | Узнать дату из UnixTime

Тогда у вас в функции ошибка. Переменная cur должна изначально быть равной дате произвольной полночи. Верните числовое значение cur на то, что вам предлагали в первый раз решения проблемы. Я вообще не вижу причин менять функцию, ответ от сервера в таком же формате идёт как и время, которые вы указывали при первом обращении сюда верно? Просто подставляете новую переменную и все.

Когда вы говорите что не можете сделать, вам всего-лишь не хватает фантазии придумать какой-нибудь костыль.

10

Re: AHK: FormatTime | Узнать дату из UnixTime

Привет.
Поскольку UnixTime - это секунды и все значения времени приводятся к ним, то в тело функции нужно добавить желаемый сдвиг времени на нужное количество секунд.


shiftTime	:= 10800	; Разница во времени 3ч = 180м = 10800с
oResp		:= {"response":{"status":false,"process_time":0.0007,"server_date":1509801654,"code":103}}

MsgBox,,Title,% DateFromUnix(oResp.response.server_date, shiftTime)

DateFromUnix(date, timeShift := 0) {
	cur := 19700101
	cur += date, s
	cur += timeShift, s
	FormatTime, cDate, %cur%, yyyy.MM.dd в HH:mm
	return cDate
}

11 (изменено: ypppu, 2017-12-09 14:54:55)

Re: AHK: FormatTime | Узнать дату из UnixTime

KusochekDobra, большое тебе спасибо, ты всегда выручаешь, все понятно объясняешь. )
У меня в таком случае последний вопрос - как узнать, насколько -+ у меня на компьютере часы по МСК?
Ну, то есть, как узнать свой часовой пояс?

12

Re: AHK: FormatTime | Узнать дату из UnixTime

var -= A_NowUTC, Hours
msgbox % var

13

Re: AHK: FormatTime | Узнать дату из UnixTime

userTimeZone := A_Now
EnvSub userTimeZone, A_NowUTC, h
oResp := {"response":{"status":false, "process_time":0.0007, "server_date":1509801654, "code":103}}
MsgBox % DateFromUnix(oResp.response.server_date, userTimeZone)

DateFromUnix(dateInSeconds, timeZone := 0) {
	cur := 19700101
	cur += dateInSeconds, s
	cur += timeZone, h
	FormatTime cDate, % cur, yyyy.MM.dd в HH:mm
	Return cDate
}

14 (изменено: KusochekDobra, 2017-11-05 01:26:27)

Re: AHK: FormatTime | Узнать дату из UnixTime

Если интересно конкретно моё мнение, то опираясь на предложенные варианты можно вообще ничего не менять в теле функции, произведя сдвиг прямо в вызове:


shiftTime	:= A_Now		; Местное время
shiftTime	-= A_NowUTC, s	; Разница
oResp		:= {"response":{"status":false,"process_time":0.0007,"server_date":1509801654,"code":103}}

MsgBox,,Title,% DateFromUnix(oResp.response.server_date - shiftTime)	; Вычесть разницу из "server_date"

DateFromUnix(date) {
	cur := 19700101
	cur += date, s
	FormatTime, cDate, %cur%, yyyy.MM.dd в HH:mm
	return cDate
}

UPD: Или прибавить разницу, если нужно сдвинуть вперёд.