簡體   English   中英

UTC日期時間轉換為美國東部

[英]UTC DateTime Conversion To US Eastern

我對UTC感到困惑,無法在任何地方找到任何東西。

我的格林尼治標准時間是00:00:00

我想將其轉換為美國東部標准時間的UTC時間。

我將04:00:00-04作為UTC字符串。

這是我的代碼。

string UTCDateTime;
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time")
DateTime dateTimeOld = new DateTime(2017,09,11,0,0,0);
DateTime dateTime = TimeZoneInfo.ConvertTimeToUtc(dateTimeOld, timeZone);

UTCDateTime = dateTime.ToUniversalTime().ToString("yyyy-MM-dd HH:mm:ss");

var offset = timeZone.GetUtcOffset(dateTime);

UTCDateTime += ((offset < TimeSpan.Zero) ? "-" : "+") + offset.ToString("hh");'

所以我的輸出將是一個UTC字符串:“ 2017-09-11 04:00:00-04”。

那是對的嗎? 不應該是“ 2017-09-11 00:00:00-04”

使用DateTimeOffset更好地處理此用例。

// The source time in UTC
DateTimeOffset utc = new DateTimeOffset(2017, 9, 11, 0, 0, 0, TimeSpan.Zero);

// The time zone for the Eastern US
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");

// The converted time in the time zone
DateTimeOffset eastern = TimeZoneInfo.ConvertTime(utc, timeZone);

// output in a usable format
Console.WriteLine(eastern.ToString("yyyy-MM-dd HH:mm:ss zzz"));

//=>  2017-09-10 20:00:00 -04:00

一些注意事項:

  • 在這種情況下,GMT和UTC的含義相同。 說您擁有格林尼治標准時間,並且您想要UTC是荒謬的。 如果您要使用特定格式的字符串,請描述該格式。 UTC不是字符串格式。

  • "US Eastern Standard Time"條目應僅在印第安納州的某些地區使用。 美國東部時區的大多數地區由"Eastern Standard Time"條目表示。 如果您有興趣,請參閱《印第安納時間》以獲取更多詳細信息。

  • 不要假定所有時區都只有幾個小時的偏移量。 許多時間也會相差30或45分鍾。 如果您使用任何時區,僅顯示幾個小時可能會導致數據錯誤。

  • 除非源數據確實在計算機的本地時區中,否則請避免調用ToUniversalTime

  • 注意輸出。 您的代碼或假設都不正確。 美國東部時間比世界協調時間四個小時。 因此,當它是UTC午夜時,則是美國東部時間前一天的20:00(或8:00 PM)。

您的dateTimeOld是EST的午夜。

然后,使用您的時區將其轉換為UTC並放入dateTime。

由於UTC比EST早4個小時,因此DateTimeKind.Utc的dateTime現在為04:00。

然后,您可以在分配中再次將其轉換為UTCDateTime。 但是由於它已經是UTC(根據您先前的轉換),所以它什么也不做。 因此它將把2017-09-11 04:00:00放入字符串UTCDateTime。

然后,您從時區信息中添加了時區偏移量-這沒有任何意義。 時區與本地時間-dateTimeOld相關聯。 通過轉換為UTC,您可以特別擺脫時區偏移。

因此,要么從dateTimeOld初始化字符串,然后添加時區偏移量,這將給出:2017-09-11 00:00:00-04

或直接在dateTime中使用UTC時間加上“ Z”后綴來表示UTC(祖魯時間),因此您將獲得2017-09-11 04:00:00Z

這兩個都表示同一時間(除非我復制粘貼了錯誤的內容):)

通常,在處理日期時,通常的約定是盡快將數據轉換為UTC,並在整個程序中保留UTC,然后在顯示數據時將其轉換為本地時間。 但是您也可以選擇使用DateTimeOffset-與DateTime不同,它可以跨多個時區存儲本地時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM