Что это за формат времени UTC? - PullRequest
4 голосов
/ 30 июля 2011

Я анализирую XML-файл, который имеет поле с именем UTCTime и содержит значение 1311346453064. Он также поставляется с полем с именем UTC, которое содержит значение 2011-07-22T10: 54: 13.064-04: 00, которое является полным.Net DateTimeOffset я считаю.Первое поле я не могу понять, хотя.Что создает дату таким образом?Он слишком велик, чтобы быть меткой времени Unix, так как он добавляет около 41 тысячелетия к 1 января 1970 года.Любая помощь в его идентификации или о том, как я могу преобразовать его в дату и время без использования этого второго поля, была бы очень полезной!Спасибо.

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

Это эквивалентно метке времени Unix [то есть прямому счету с 1970 года], но в миллисекундах вместо секунд.

$ date -d @1311346453
Fri Jul 22 10:54:13 EDT 2011

Окончание с 3064 сделало это очевидным для меня.

Таким образом, для конвертации в .NET вы должны использовать

static readonly DateTime epoch = new DateTime(1970,1,1,0,0,0,
                                              DateTimeKind.Utc);
long value = 1311346453064L;
var ts = new TimeSpan(value*TimeSpan.TicksPerMillisecond);
var dt = epoch + ts;

Или, немного более эффективно, за счет некоторой читабельности

const long epochTicks = 621355968000000000L;
var dt = new TimeSpan(value*TimeSpan.TicksPerMillisecond+epochTicks,
                      DateTimeKind.Utc);

Обратите внимание, что при этом отбрасывается информация о часовом поясе (смещение-04:00) в другом поле.

1 голос
/ 30 июля 2011

Пример Javascript:

D:\ :: more > date.js
WScript.Echo( new Date().getTime() );
^Z

D:\ :: cscript date.js
1311975458665

Это количество миллисекунд с 01.01.1970.

...