Я работаю над системой, связанной с телевизионными записями.
Я разбираю следующий xml из другой системы (к которой у меня нет документации):
<Program FileName="2009.11.07-Saturday 07 November 2009.dvr-ms" SubChannel="ABC1" StartTime="633931722046825183" StopTime="633932388000119414" ActualStopTime="633932388016825183" ShareShow="True" /> <Program FileName="2009.11.08-Sunday 08 November 2009.dvr-ms" SubChannel="ABC1" StartTime="633932586046773253" StopTime="633933252000157907" ActualStopTime="633933252006773253" ShareShow="True" /> <Program FileName="2009.11.09-Monday 09 November 2009.dvr-ms" SubChannel="ABC1" StartTime="633933450046168953" StopTime="633934116000207688" ActualStopTime="633934116026168953" ShareShow="True" /> <Program FileName="2009.11.10-Tuesday 10 November 2009.dvr-ms" SubChannel="ABC1" StartTime="633934314046899495" StopTime="633934980000869533" ActualStopTime="633934980096899495" ShareShow="True" /> <Program FileName="2009.11.11-Wednesday 11 November 2009.dvr-ms" SubChannel="ABC1" StartTime="633935178054202612" StopTime="633935844000077447" ActualStopTime="633935844064202612" ShareShow="True" /> <Program FileName="2009.11.12-Thursday 12 November 2009.dvr-ms" SubChannel="ABC1" StartTime="633936042047633656" StopTime="633936708000009191" ActualStopTime="633936708047633656" ShareShow="True" />
Мой вопрос: кто-нибудь знает формат timestamp атрибутов StartTime и StopTime? Я думал, что временные метки для второго имеют 10 цифр, так где же остальные 8? Мое предположение – это то, что напоминает часовой пояс и миллисекундную точность.
Я использую php, поэтому особый способ преобразования его в datetime был бы приятным, но все хорошо.
Похоже, что C # DateTime ticks:
Тип значения DateTime представляет даты и время со значениями от 12:00 до полуночи, 1 января 0001 года Anno Domini (общая эра) до 23:59:59, 31 декабря 9999 года н.э. (CE)
Эта строка:
Console.WriteLine (new DateTime (633936042047633656));
печатает:
11/12/2009 6:30:04
Если вам нужно конвертировать из этих чисел в Unix-время, вычитайте 621355968000000000L, что является эпохой Unix, выраженной в тиках .
Если gmp lib установлен в php, вы можете сделать это следующим образом:
$epoch = '621355968000000000'; $newtime = gmp_sub($dateTime, $epoch); $newtime = gmp_div($newtime, '10000000'); $timestamp = gmp_strval($newtime);
и теперь у вас есть дата:
echo date('Ymd H:i:s', $timestamp);
$dateLargeInt= "131424999530821857"; $secsAfterADEpoch = $dateLargeInt / (10000000); $ADToUnixConvertor=((1970-1601) * 365.242190) * 86400; // unix epoch - AD epoch * number of tropical days * seconds in a day $unixTsLastLogon=intval($secsAfterADEpoch-$ADToUnixConvertor); // unix Timestamp version of AD timestamp $lastlogon=date("dmY", $unixTsLastLogon); // formatted date echo $lastlogon;