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)轉換而來。
您是否考慮過使用野田時間呢? https://code.google.com/p/noda-time/ – 2013-03-02 01:42:27
我也會建議noda時間,我也用過http://www.babiej.demon.nl/Tz4Net/main.htm成功 – JeremyWeir 2013-03-02 01:43:16
@ RayCheng我會給它一個鏡頭。謝謝。 – 2013-03-02 01:45:43