DateTime 对象有一个“Kind”变量,它可以帮助 TimeZoneInfo 知道如何处理它。在 TimeZone.ConvertTime 的MSDN 文档中,它具有以下内容:
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);
结果是:
当地时区是“太平洋标准时间”。
将 GMT 转换为 EST:2013 年 3 月 1 日晚上 8:00:00
将本地转换为 EST:2013 年 3 月 2 日凌晨 4:00:00
将未指定转换为 EST:2013 年 3 月 2 日凌晨 4:00:00
或者,如果您当地的时区是“东部标准时间”,您会得到这些结果
当地时区是“东部标准时间”。
将 GMT 转换为 EST:2013 年 3 月 1 日晚上 8:00:00
将本地转换为 EST:2013 年 3 月 2 日凌晨 1:00:00
将未指定转换为 EST:2013 年 3 月 2 日凌晨 1:00:00
如果您希望 TimeZoneInfo 像 Utc 一样对待“未指定”,您应该像 TimeZoneInfo.ConvertTimeFromUtc 一样运行。再次来自MSDN 文档
DateTimeKind.Local,引发 ArgumentException。
DateTimeKind.Unspecified 或 DateTimeKind.Utc,从协调世界时 (UTC) 转换而来。