Форум » Для флейма » Unix epoch time » Ответить

Unix epoch time

Dima: Есть цифирки 1575996305490 Как из них получить дату ? Конвертер https://www.epochconverter.com/ правильно преобразовал GMT: Tuesday, 10 December 2019 г., 16:45:05.490 Мне достаточно просто вытащить дату. Как средствами Harbour это сделать ? PS Это я XML разбираю а там такое живет <N_DATE>1575996305490</N_DATE>

Ответов - 15

Dima: Вроде так ? ctod( "01.01.1970" ) + Days( nUnixTime/1000 ) ? ctod( "01.01.1970" ) + Days( 1575996305490 /1000 ) Вроде верно пашет

Pasha: unix epoch time - это количество секунд после 1.1.1970 В сутках 86400 секунд Переводим сегодняшнюю дату в unix epoch time, без секунд, это будет полночь: (Date()-ctod("01.01.1970"))*86400 = 1575936000 В примере судя по всему даже не секунды, а миллисекунды Обратный перевод: 1575936000/86400+ctod("01.01.1970") или 1575996305490/1000/86400+ctod("01.01.1970")

Pasha: Написали про одно и то же, и результат одинаковый


Dima: Pasha пишет: Написали про одно и то же, и результат одинаковый Спасибо за участие !

Dima: Интересно а как тогда работает функция ? hb_NtoT(<nValue>) ➜ tTimeStamp converts a numeric value nValue (which is evaluated as if being a Unix time value) to a timestamp. Пробнул сунуть ей 1575996305490 и вернула не понятно какую дату

Pasha: По памяти: в харборе время хранится в формате double, где целая часть - юлианские дни, те же, что и для даты, а дробная часть - время Судя по сырцам, эта функция просто преобразует формат Numeric в DateTime, никаким unix epoch time там и не пахнет

SergKis: Давно не сталкивался напрямую с sql и попалась ситуация с датой -- Получить все события по всем объектам от 16/10/2017 23:40:00 до текущего момента! SELECT * FROM EVENTS WHERE datetime > 1508186400 order by rowid; 1508186400 => 16/10/2017 23:40:00 как получит в hb TimeStamp значение из числа что то не соображу

Dima: SergKis пишет: 1508186400 => 16/10/2017 23:40:00 как получит в hb TimeStamp значение из числа что то не соображу Так наверное [pre2] Set( _SET_DATEFORMAT,"DD/MM/YYYY") ux:=1508186400 nDays := ux / 86400 ? dWinDate := hb_datetime( 1970 , 1 , 1 ) + nDays [/pre2] Правда время отличается на 3 часа Но подставил свои данные и вышел на ровные цифры GMT: Tuesday, 10 December 2019 г., 16:45:05.490 где UX:=1575996305490/1000

SergKis: Dima Спасибо Правда время отличается на 3 часа Это нормально. Галочка на "летнее"\"зимнее" время учтет (2 или 3) часа

Dima: Еще вариант ux:=1508186400 nDays := ux / 86400 ? {^1970/01/01,00:00:00.000}+nDays

SergKis: Dima пишет Еще вариант И де ты раскопал такое. А для даты GERMAN надо точки ставить ? ? {^1970.01.01,00:00:00.000}+nDays Как вытянуть из даты timestamp время ? дата hb_TtoD( tDate ), а время строкой есть вариант, или по старинке cTime := hb_TtoC( tDate ) cTime := Subs( cTime, At(" ", cTime) + 1 ) cTime := StrTran( cTime, ":", "" ) cTime := StrTran( cTime, ".", "" ) смотрел по source, не увидел

Петр: SergKis пишет: Это нормально. Галочка на "летнее"\"зимнее" время учтет (2 или 3) часа так лучше hb_TSToUTC( dWinDate ) Как вытянуть из даты timestamp время ? tsU := hb_TSToUTC( dWinDate ) ? hb_StrFormat("%1$02d:%2$02d:%3$02d", hb_Hour(tsU), hb_Minute(tsU), hb_Sec(tsU))

Dima: SergKis пишет: Как вытянуть из даты timestamp время ? dWinDate := hb_datetime( 1970 , 1 , 1 ) + nDays ctime:="" ? HB_TTOD( dWinDate, @cTime, "hh:mm:ss" ) ? ctime

SergKis: Петр пишет так лучше hb_TSToUTC( dWinDate ) В базе sql (чужой), конвертированное в tDate по hb_TSToUTC дает на 3-и часа меньше, т.е. к тому времени надо сделать +3 часа при летнем и на +2 при зимнем. tsU := hb_TSToUTC( dWinDate ) ? hb_StrFormat("%1$02d:%2$02d:%3$02d", hb_Hour(tsU), hb_Minute(tsU), hb_Sec(tsU)) Это не лучше (по написанию) от моего варианта Вариант от Димы симпатичней. Всем спасибо.

SergKis: Петр пишет лучше hb_TSToUTC( dWinDate ) Применить без галочек можно и нужно. Найти разницу от текущей даты и hb_TSToUTC( <от нее же> ) и делать + к дате из колонки базы. В задаваемых в GETBOX датах применять hb_TSToUTC(...) Спасибо за мысль



полная версия страницы