我得到一個字符串形式的日期/時間值,我將其轉換爲DateTime
對象。如何將時區指定給DateTime?
eg. 2012-11-10 11:37:06
我知道這次是從不同的時區到我係統的本地時間。
如何爲DateTime
對象指定一個時區,以便我可以準確地在當地時區中表示時間,並且對日光節約變化很敏感?
我得到一個字符串形式的日期/時間值,我將其轉換爲DateTime
對象。如何將時區指定給DateTime?
eg. 2012-11-10 11:37:06
我知道這次是從不同的時區到我係統的本地時間。
如何爲DateTime
對象指定一個時區,以便我可以準確地在當地時區中表示時間,並且對日光節約變化很敏感?
TimeZoneInfo.ConvertTimeToUtc可能會做你想做的。
通過這種方式,您可以轉換(在導入時)並將所有時間存儲爲UTC(假設您知道什麼時區夏令時偏移等,與原始時間相關聯),然後在任何時區顯示它們。我已經鏈接到同時使用DateTime
和TimeZoneInfo
對象的過載方法。
TimeZoneInfo
還有其他方法,這些方法也可用於此類轉換。
A DateTime
不是時區,並且不完全知道時區。它有一個Kind
,表示它是否在系統時區(Local
),UTC(Universal
)或「其他」(Unspecified
)。
有DateTimeOffset
,這就像DateTime
,但也與UTC的偏移量。這與擁有時區不一樣 - 它不知道當地時間會在其他時間點。
我有偏見,但我建議使用我Noda Time擁有各類類型來表示不同的概念:
ZonedDateTime
- 在特定的時間區段中的本地日期/時間,具有偏移從UTC只是在模棱兩可的情況下OffsetDateTime
- 當地的日期/時間與UTC的偏移量(但沒有具體的時區)LocalDateTime
- 只是一個本地日期/時間,沒有具體的時間區或偏移LocalDate
- 沒有時間組件或區LocalTime
日期 - 只有一個日期的時間,沒有日期或區域所有這些也有相關的日曆系統(不像DateTime
)。一時之間,有一個Instant
這只是Unix時代的一些滴答。
如果你想堅持BCL類型,你可以保留一個DateTime
與TimeZoneInfo
在你自己的數據類型。
DateTime沒有時區只是一個很好的例子。 – Paparazzi
@Blam:'DateTime'甚至沒有偏移量作爲其數據的一部分... –
@JonSkeet使用ToString,您可以使用zzz獲得偏移量。如果這不是DateTime的一部分,那麼來自哪裏?在你的回答中,你似乎暗示有一個抵消。 – Paparazzi