2013-03-06 66 views
3

要保持簡短而甜蜜的我有2個電腦:調整日期時間到DST

PC 1具有DST關閉

PC 2具有DST開啓。

PC 1向PC 2發送一個DateTime並用它來設置它的時間。

以上所有我已經到位,但我的問題是,當PC 2收到DateTime時,我該如何檢查是否需要DST調整?

PC's是基於英國的。

編輯: - 位更多細節incase有混亂。 當PC 2從PC 1檢索時間時,它會將系統時間更改爲此值,但我需要確保如果需要+/- 1小時(DTS),則在設置系統日期和時間之前應用該時間。

+3

使用UTC持久性和運輸 – bryanmac 2013-03-06 16:07:23

+0

重新編輯:你仍然可以發送UTC的權利?當UTC時間發送到另一臺PC時,它知道它是時區,因此它可以從衆所周知的UTC傳輸中轉換,應用它的時區偏移並更新時間。 – bryanmac 2013-03-07 02:03:26

+0

@bryanmac好吧,讓我們說我接收UTC作爲DateTime對象,我只是使用它來設置系統時間,或者我將它轉換回,我猜測,GMT時間? – Gaz83 2013-03-07 13:30:49

回答

2

我會推薦使用UTC進行傳輸和持久性。

還要小心不要使用日期時間作爲算法的關鍵部分 - 它只是數據。日期和時間轉移並糾正自己。我已經看到了軟件崩潰時,PC修正它的時間:)

這裏的另一篇文章上的主題的更多信息: Daylight saving time and time zone best practices

0

你沒有表現出任何的代碼,但是你標記你的問題爲 ,所以我會從這個角度回答。

如果你只是需要確保你談論的是同一時刻,那麼請使用DateTime.Kind = DateTimeKind.Utc,如從DateTime.UtcNow獲得。

如果您確實需要知道PC1認爲這是一次,而PC2認爲它是另一次,並且您仍然想知道這兩件事情代表相同的時刻,那麼請使用DateTimeOffset。這將包括計算機的本地日期和時間以及日期和時間表示的UTC偏移量。

無論採用哪種方法,您都應該使用ISO8601格式進行傳輸和持久化,因此無論觀察者的文化或時區如何,您的意思都很清晰。在.Net中,這是從DateTimeDateTimeOffset.ToString("o")獲得的。

一個UTC DateTime在ISO8601格式是這樣的:

2013-03-06T09:00:00Z 

一個DateTimeOffset在ISO8601格式是這樣的:

2013-03-06T10:00:00+01:00 

.net中,此調用Round Trip模式 - 因爲它是爲您描述的確切目的而設計。

有關DateTimeOffset的進一步說明 - 請參閱this post