2013-03-02 50 views
14

我需要幫助將DateTime轉換爲特定時區。我下面有什麼不能正常工作。如何將日期時間轉換爲C#中的特定時區?

gmTime = 03/02/2013 1:00:00 AM

TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
var time = timeZoneInfo.ConvertTime(gmTime, timeZone); 

當調試的time值,被施加區域時,其應該是03/01/2013 8:00:00 PM,它回來作爲03/02/2013 1:00:00 AM

如果我做time.ToLocalTime()那麼我會得到正確的值。但是,我需要將time轉換爲不同的時區。

+0

您是否考慮過使用野田時間呢? https://code.google.com/p/noda-time/ – 2013-03-02 01:42:27

+0

我也會建議noda時間,我也用過http://www.babiej.demon.nl/Tz4Net/main.htm成功 – JeremyWeir 2013-03-02 01:43:16

+0

@ RayCheng我會給它一個鏡頭。謝謝。 – 2013-03-02 01:45:43

回答

5

嘗試類似如下的蔡斯

TimeZoneInfo estTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 
DateTime estDateTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, estTimeZone); 
13

datetime對象有一個「有心人」變量,它可以幫助的TimeZoneInfo知道如何對待它。在MSDN documentation爲TimeZone.ConvertTime它具有如下:

DateTimeKind.Local,本地時間轉換爲在destinationTimeZone的時間。

DateTimeKind.Utc,將協調世界時(UTC)轉換爲destinationTimeZone中的時間。

DateTimeKind.Unspecified,假定爲本地。

例如:

Console.WriteLine("Local time zone is '{0}'.", TimeZoneInfo.Local.Id); 

    var gmTime   = new DateTime(2013, 03, 02, 01, 00, 00, DateTimeKind.Utc); 
    var localTime  = new DateTime(2013, 03, 02, 01, 00, 00, DateTimeKind.Local); 
    var unspecifiedTime = new DateTime(2013, 03, 02, 01, 00, 00); 

    var timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); 

    var gmTimeConverted   = TimeZoneInfo.ConvertTime(gmTime,   timeZone); // 03/02/2013 8:00:00AM 
    var localTimeConverted  = TimeZoneInfo.ConvertTime(localTime,  timeZone); // 03/02/2013 
    var unspecifiedTimeConverted = TimeZoneInfo.ConvertTime(unspecifiedTime, timeZone); 

    Console.WriteLine("Converting GMT   to EST: {0}", gmTimeConverted); 
    Console.WriteLine("Converting Local  to EST: {0}", localTimeConverted); 
    Console.WriteLine("Converting Unspecified to EST: {0}", unspecifiedTimeConverted); 

結果:

 
Local time zone is 'Pacific Standard Time'. 
Converting GMT   to EST: 3/1/2013 8:00:00 PM 
Converting Local  to EST: 3/2/2013 4:00:00 AM 
Converting Unspecified to EST: 3/2/2013 4:00:00 AM 

或者,如果您的本地時區是 '東部標準時間',你得到這些結果

 
Local time zone is 'Eastern Standard Time'. 
Converting GMT   to EST: 3/1/2013 8:00:00 PM 
Converting Local  to EST: 3/2/2013 1:00:00 AM 
Converting Unspecified to EST: 3/2/2013 1:00:00 AM 



如果您希望TimeZoneInfo像Utc那樣對待「未指定」,您應該像TimeZoneInfo.ConvertTimeFromUtc一樣運行。再次從MSDN documentation

DateTimeKind.Local,引發ArgumentException。

DateTimeKind.Unspecified或DateTimeKind.Utc,從協調世界時(UTC)轉換而來。

相關問題