我们正在为 Web 服务客户端开发 C# 应用程序。这将在 Windows XP PC 上运行。
Web 服务返回的字段之一是日期时间字段。服务器返回 GMT 格式的字段,即末尾带有“Z”。
然而,我们发现.NET似乎做了某种隐式转换,并且时间总是超出12小时。
以下代码示例在一定程度上解决了这个问题,因为 12 小时的时差已经消失,但它不考虑新西兰夏令时。
CultureInfo ci = new CultureInfo("en-NZ");
string date = "Web service date".ToString("R", ci);
DateTime convertedDate = DateTime.Parse(date);
As per 这个约会网站 http://www.timeanddate.com/worldclock/city.html?n=22:
UTC/GMT 偏移量
标准时区:UTC/GMT +12 小时
夏令时:+1 小时
当前时区偏移量:UTC/GMT +13 小时
我们如何调整额外的时间?这可以通过编程方式完成还是这是 PC 上的某种设置?
对于字符串,例如2012-09-19 01:27:30.000
, DateTime.Parse
无法判断日期和时间来自哪个时区。
DateTime
has a Kind属性,可以具有三个时区选项之一:
NOTE 如果您希望表示 UTC 或您当地时区以外的日期/时间,那么您应该使用DateTimeOffset http://msdn.microsoft.com/en-us/library/system.datetimeoffset.aspx.
所以对于你问题中的代码:
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();
这将为您提供所需的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)