要保持簡短而甜蜜的我有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),則在設置系統日期和時間之前應用該時間。
要保持簡短而甜蜜的我有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),則在設置系統日期和時間之前應用該時間。
我會推薦使用UTC進行傳輸和持久性。
還要小心不要使用日期時間作爲算法的關鍵部分 - 它只是數據。日期和時間轉移並糾正自己。我已經看到了軟件崩潰時,PC修正它的時間:)
這裏的另一篇文章上的主題的更多信息: Daylight saving time and time zone best practices
你沒有表現出任何的代碼,但是你標記你的問題爲c# ,所以我會從這個角度回答。
如果你只是需要確保你談論的是同一時刻,那麼請使用DateTime
與.Kind = DateTimeKind.Utc
,如從DateTime.UtcNow
獲得。
如果您確實需要知道PC1認爲這是一次,而PC2認爲它是另一次,並且您仍然想知道這兩件事情代表相同的時刻,那麼請使用DateTimeOffset
。這將包括計算機的本地日期和時間以及日期和時間表示的UTC偏移量。
無論採用哪種方法,您都應該使用ISO8601格式進行傳輸和持久化,因此無論觀察者的文化或時區如何,您的意思都很清晰。在.Net中,這是從DateTime
或DateTimeOffset
的.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。
使用UTC持久性和運輸 – bryanmac 2013-03-06 16:07:23
重新編輯:你仍然可以發送UTC的權利?當UTC時間發送到另一臺PC時,它知道它是時區,因此它可以從衆所周知的UTC傳輸中轉換,應用它的時區偏移並更新時間。 – bryanmac 2013-03-07 02:03:26
@bryanmac好吧,讓我們說我接收UTC作爲DateTime對象,我只是使用它來設置系統時間,或者我將它轉換回,我猜測,GMT時間? – Gaz83 2013-03-07 13:30:49