2012-11-13 57 views
-1

我得到一個字符串形式的日期/時間值,我將其轉換爲DateTime對象。如何將時區指定給DateTime?

eg. 2012-11-10 11:37:06 

我知道這次是從不同的時區到我係統的本地時間。

如何爲DateTime對象指定一個時區,以便我可以準確地在當地時區中表示時間,並且對日光節約變化很敏感?

+0

DateTime沒有時區只是一個很好的例子。 – Paparazzi

+0

@Blam:'DateTime'甚至沒有偏移量作爲其數據的一部分... –

+0

@JonSkeet使用ToString,您可以使用zzz獲得偏移量。如果這不是DateTime的一部分,那麼來自哪裏?在你的回答中,你似乎暗示有一個抵消。 – Paparazzi

回答

0

TimeZoneInfo.ConvertTimeToUtc可能會做你想做的。

通過這種方式,您可以轉換(在導入時)並將所有時間存儲爲UTC(假設您知道什麼時區夏令時偏移等,與原始時間相關聯),然後在任何時區顯示它們。我已經鏈接到同時使用DateTimeTimeZoneInfo對象的過載方法。

TimeZoneInfo還有其他方法,這些方法也可用於此類轉換。

0

A DateTime不是時區,並且不完全知道時區。它有一個Kind,表示它是否在系統時區(Local),UTC(Universal)或「其他」(Unspecified)。

DateTimeOffset,這就像DateTime,但也與UTC的偏移量。這與擁有時區不一樣 - 它不知道當地時間會在其他時間點。

我有偏見,但我建議使用我Noda Time擁有各類類型來表示不同的概念:

  • ZonedDateTime - 在特定的時間區段中的本地日期/時間,具有偏移從UTC只是在模棱兩可的情況下
  • OffsetDateTime - 當地的日期/時間與UTC的偏移量(但沒有具體的時區)
  • LocalDateTime - 只是一個本地日期/時間,沒有具體的時間區或偏移
  • LocalDate - 沒有時間組件或區
  • LocalTime日期 - 只有一個日期的時間,沒有日期或區域

所有這些也有相關的日曆系統(不像DateTime)。一時之間,有一個Instant這只是Unix時代的一些滴答。

如果你想堅持BCL類型,你可以保留一個DateTimeTimeZoneInfo在你自己的數據類型。

相關問題