UNIX time to DateList


13

У меня есть данные, отмеченные временем UNIX, что составляет количество секунд с 1 января 1970 года по UTC. К сожалению, похоже, что большинство функций даты и времени в Mathematica основаны на локальном часовом поясе системы. Как преобразовать временную метку UNIX в DateList в UTC?

+2

DateList [] занимает абсолютное время в качестве входных данных. Но M абсолютное время начинается в 1900 году, а не в 1970 году. Поэтому возьмите свое время Unix и добавьте в него 'AbsoluteTime [{1970, 1, 1, 0, 0, 0}]', что составляет '2208988800' секунд. Теперь ваш список Unix станет M абсолютным временем, тогда вы можете использовать 'DateList' на нем. Будет ли это работать на вас? Если вы укажете какой-то ввод, это поможет. 26 авг. 132013-08-26 00:17:42

10

Начиная с Mathematica версии 10.1 существует функция FromUnixTime, которая выполняет преобразование с отметки времени UNIX в DateObject.

FromUnixTime[1427793986] 

enter image description here

FromUnixTime[1427793986] // DateList 

{2015, 3, 31, 11, 26, 26.}

FromUnixTime[0, TimeZone -> 0] 

enter image description here

+1

[связанное сообщение блога Вольфрама] (http://blog.wolfram.com/2015/07/09/new-in-the-wolfram-language-iso-dates-and-more/) имеет дополнительный фон для этой и других новых возможностей даты и времени (например, поддержка ISO 8601). 16 окт. 152015-10-16 21:45:33


6

Число секунд между 1 января 1900 года и 1 января 1970 года может быть дано AbsoluteTime[{1970, 1, 1, 2, 0, 0}]. Существует также DateList, который, если задан номер, рассчитает, какая дата была бы, если бы это было количество секунд, заданное AbsoluteTime.

DateList[AbsoluteTime[], TimeZone -> 2] 

{2013, 8, 26, 2, 28, 7,97767}

DateList[AbsoluteTime[{1970, 1, 1, 2, 0, 0}] + [email protected]["!date +%s"]] 

{2013, 8, 26, 2, 28, 7.}

Небольшая разница, по-видимому, связана с тем, что временная метка UNIX округляется вниз.

([email protected]["!date +%s"] дает только текущую метку времени на системах UNIX. Все остальные должны будут вставлять в свои собственные метки времени, чтобы попробовать его. Кроме того, я использую свой собственный часовой пояс, который +2.)

  0

Обобщение, смещение - 'AbsoluteTime [{1970, 1, 1, TimeZone [], 0, 0}]'? Я очень смущен! Я спросил об этом как о новом вопросе здесь: http://mathematica.stackexchange.com/questions/77974/converting-between-absolutetime-and-unix-time 23 мар. 152015-03-23 03:03:21

  0

@dreeves Да или '$ TimeZone' (' TimeZone [] 'представляется недокументированным.) 23 мар. 152015-03-23 10:52:15