如何在c#中将日期时间转换为特定时区?
我需要帮助将DateTime
转换为特定时区。 我下面的内容不能正常工作。
gmTime
= 03/02/2013 1:00:00 AM
TimeZoneInfo timeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); var time = timeZoneInfo.ConvertTime(gmTime, timeZone);
当我调试time
值time
,应该是03/01/2013 8:00:00 PM
应用区域时,它将返回03/02/2013 1:00:00 AM
。
如果我做time.ToLocalTime()
然后我得到正确的值。 但是,我需要将time
转换为不同的时区。
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:3/1/2013 8:00:00 PM 将本地转换为EST:3/2/2013 4:00:00 AM 将未指定转换为EST:3/2/2013 4:00:00 AM
或者,如果您当地的时区是“东部标准时间”,则会获得这些结果
当地时区是“东部标准时间”。 将GMT转换为EST:3/1/2013 8:00:00 PM 将本地转换为EST:2013年3月2日凌晨1:00:00 转换未指定为EST:3/2/2013 1:00:00 AM
如果您希望TimeZoneInfo像Utc一样处理’Unspecified’,那么您应该像TimeZoneInfo.ConvertTimeFromUtc一样运行。 再次来自MSDN文档
DateTimeKind.Local,抛出ArgumentException。
DateTimeKind.Unspecified或DateTimeKind.Utc,从协调世界时(UTC)转换。
尝试类似下面的Chace
TimeZoneInfo estTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); DateTime estDateTime = TimeZoneInfo.ConvertTimeFromUtc(timeUtc, estTimeZone);