2017-07-28 125 views
2

我明白這個問題已經以各種形式被覆蓋了很多次,但沒有一個能夠幫助我解決特定的問題。我使用以下方法將輸入數據轉換爲C#DateTime變量。麻煩的是,發送數據的公司聲稱我錯誤地將其轉換,因爲時間比我的系統晚了一個小時。我會認爲這與英國夏令時有關,但是在我的結尾或者在他們的最後,這是問題,因爲我認爲下面的方法會考慮英國夏令時,因爲我使用的是ToLocalTime?任何幫助將被感激地接受。C#Unix時間戳到DateTime

private DateTime ConvertTimeStamp(double t) 
{ 
    return new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) 
     .AddMilliseconds(t) 
     .ToLocalTime(); 
} 
+0

好點mjwills - 不知道爲什麼我沒有注意到之前。我將編輯上面的代碼,因爲它會使讀起來更容易。 – user470249

+0

不幸的是,我還沒有得到他們的原始數據的例子,所以可能沒有太大的幫助,但他們聲稱他們正在發送以下日期時間; 18/07/2017 16:28:09 - 並且這出現在我的系統中(使用上述方法將輸入的時間戳轉換成); 18/07/2017 15:28:09 – user470249

+1

您可以請他們提供一些樣本數據供您在測試中使用嗎?即他們給你一些數字和他們應該代表的日期時間,然後你可以使用它們進行正確的測試。我無法想象他們會不願意這麼做...... – Chris

回答

4

ToLocalTime會調整時區是什麼地方的時間是電腦實際運行此方法。根據它在雲中運行/部署的位置,這可能會給你帶來截然不同的結果。時區對於這類東西可能是一個巨大的痛苦。如果他們向您發送UTC unix表示,並且您可以用ToUniversal打開DateTime並從那裏打開,那麼您可以安全地將其轉換回您選擇的時區。

如果他們沒有發送UTC,你需要準確找出他們期待的時區,並使用它來代替ToLocal。

0

那麼這取決於他們給你什麼。但假設他們給你UTC時間,你可以使用this method of .Net 4.6並通過.ToLocalTime()將它轉換爲當地時間。如其他答案所示,最好確保指定「TimeZoneInfo」而不是使用.ToLocalTime()