DateTime对象有一个“Kind”变量,帮助TimeZoneInfo知道如何处理它。在MSDN文档中TimeZone.ConvertTime有如下内容:
DateTimeKind.Local,将本地时间转换为目标时区的时间。
DateTimeKind.Utc,将协调世界时(UTC)转换为目标时区的时间。
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);
var localTimeConverted = TimeZoneInfo.ConvertTime(localTime, timeZone);
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)进行转换。