2009-12-02 54 views
3

我正在研究與電視錄製相關的系統。18位數時間戳?

<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" /> 

我的問題是,沒有人認識的開始時間和停止時間屬性的時間戳格式:

我從另一個系統(而我沒有文檔)解析下面的XML?我認爲通常第二個時間戳有10個數字,其他8個來自哪裏?我的猜測是類似於時區和毫秒級的準確度。

我使用的是PHP,所以將其轉換爲日期時間的PHP特定方式會很好,但任何事情都很好。

+0

時間戳計數毫秒目前有10位。一旦有3/4/5/6/etc數字到「現在」時間戳。 – laura 2009-12-02 13:04:36

回答

8

它看起來像C#的日期時間蜱:

DateTime值類型表示 的日期和時間值的範圍從 午夜12:00:00,1月1日,0001 公元(共同的時代)通過 下午11點59分59秒,12月31日,9999 AD (CE)

這條線:

Console.WriteLine (new DateTime (633936042047633656)); 

打印:

11/12/2009上午六時三十分04秒

如果你需要從這些數字Unix時間轉換,621355968000000000L。減去,這是Unix紀元表示在刻度

+0

嗯,在PHP中沒有64位int可能是一個問題:P哦,我會找到一種方法。 – 2009-12-02 13:29:13

+0

在32位數據中進行數學運算並不難,只需要進行一些字符串預處理即可。先刪除字符串的最後6個字符,然後除去前導的「6」,再除以一百萬。接下來從字符串的第一個數字中減去2。現在將剩餘的轉換爲32位整數,然後減去1355968000。 – MSalters 2009-12-02 15:56:01

2

利用安裝在PHP中的GMP lib中,你可以做這樣的:

$epoch  = '621355968000000000'; 
$newtime = gmp_sub($dateTime, $epoch); 
$newtime = gmp_div($newtime, '10000000'); 
$timestamp = gmp_strval($newtime); 

,現在你有個約會:

echo date('Y-m-d H:i:s', $timestamp); 
1
$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("d-m-Y", $unixTsLastLogon); // formatted date 

echo $lastlogon; 
從時代