将UTC / GMT时间转换为本地时间
我们正在为Web服务客户端开发C#应用程序。 这将在Windows XP PC上运行。
Web服务返回的其中一个字段是DateTime字段。 服务器以GMT格式返回一个字段,即在最后以“Z”结尾。
但是,我们发现.NET似乎做了某种隐式转换,时间总是12小时。
下面的代码示例在一定程度上解决了这个问题,12小时的差异已经消失了,但是它不允许NZ夏令时。
CultureInfo ci = new CultureInfo("en-NZ");
string date = "Web service date".ToString("R", ci);
DateTime convertedDate = DateTime.Parse(date);
根据这个日期网站:
UTC / GMT偏移
标准时区:UTC / GMT +12小时
夏令时:1小时
当前时区偏移: UTC / GMT +13小时
我们如何调整额外的时间? 这可以通过编程来完成吗?或者这是PC上的某种设置?
对于诸如2012-09-19 01:27:30.000
字符串, DateTime.Parse
无法知道日期和时间来自哪个时区。
DateTime
有一个Kind属性,可以有三个时区选项之一:
注意如果您希望表示UTC以外的日期/时间或当地时区,则应使用DateTimeOffset
。
所以对于你的问题中的代码:
DateTime convertedDate = DateTime.Parse(dateStr);
var kind = convertedDate.Kind; // will equal DateTimeKind.Unspecified
你说你知道它是什么样的,所以告诉它。
DateTime convertedDate = DateTime.SpecifyKind(
DateTime.Parse(dateStr),
DateTimeKind.Utc);
var kind = convertedDate.Kind; // will equal DateTimeKind.Utc
现在,一旦系统知道UTC时间,就可以调用ToLocalTime
:
DateTime dt = convertedDate.ToLocalTime();
这会给你你需要的结果。
如果你在.NET 3.5中,我会考虑使用System.TimeZoneInfo类。 请参阅http://msdn.microsoft.com/en-us/library/system.timezoneinfo.aspx。 这应该考虑到夏令时更改正确。
// Coordinated Universal Time string from
// DateTime.Now.ToUniversalTime().ToString("u");
string date = "2009-02-25 16:13:00Z";
// Local .NET timeZone.
DateTime localDateTime = DateTime.Parse(date);
DateTime utcDateTime = localDateTime.ToUniversalTime();
// ID from:
// "HKEY_LOCAL_MACHINESoftwareMicrosoftWindows NTCurrentVersionTime Zone"
// See http://msdn.microsoft.com/en-us/library/system.timezoneinfo.id.aspx
string nzTimeZoneKey = "New Zealand Standard Time";
TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey);
DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone);
TimeZone.CurrentTimeZone.ToLocalTime(date);
链接地址: http://www.djcxy.com/p/18755.html