我们有一台运行Windows 2003 Standard的Web服务器,时区设置为GMT-06:00中部时间,并选中此框以调整夏令时更改。
此服务器上的Web服务查询日期时间字段,并且在获取日期时间时它是正确的。当数据集返回到客户端时,如果日期是3月9日至31日,4月1日至5日,10月26日至31日或11月1日至5日,则从日期时间中减去1小时。这些是DST时间变化可能发生的日期。
将数据保存到数据库时无关紧要。如果我今天保存日期为4/1/2013,则会在1小时后退回给客户。
我们已经验证SQL正确存储日期,因为它正确地返回到Web服务。
如果我在将日期转换为客户端之前将日期转换为Web服务器上的日期字符串,则会返回正确的日期字符串。
可能的DST日期之外的所有日期都很好。
夏令时期间所有可能更改日期的日期都不错。
例如,保存为4/1/2013 12:00:00 AM的日期将在2013年3月31日下午11:00:00返回。
保存为4/6/2013 12:00:00 AM的日期将于4/6/2013 12:00:00 AM返回。
我在Web服务器上添加了一个Web方法,以返回Now()的日期值,并返回正确的日期。
我发现的唯一类似的是关于XML规则的内容,该规则说明所有日期时间值都是使用偏移量传输的。我不是百分百肯定,但我不认为这是因为只有一些日期改变了。
有什么想法/建议,还有什么可以解决这个问题?
修改:我在上面列出的日期找到了一些正确的日期。
答案 0 :(得分:2)
我会尝试扩展这个问题,因为我在数据对象的序列化方面遇到了类似的问题。
将您要写入的System.DateTime
对象放入DataColumn
。默认情况下,DateTime
对象将DateTime.Kind
属性作为[Unspecified]返回。当DataColumn
设置为此DateTime
对象时,DataColumn
具有重置为[UnspecifiedLocal]的DateTimeMode
属性。
在DataColumn
为[未指定]或[UTC]时序列化DateTimeMode
期间没有任何错误。但是当DateTimeMode
设置为[UnspecifiedLocal]或[Local]时,将应用offeset。这是时间可以上升或下降的位置,具体取决于时区或夏令时配置。
可悲的消息是,我可以分享您的问题,但没有一个像样的解决方案。希望这有助于您的搜索。
我只能想到一些丑陋的解决方案,但我还没有测试过。如果我找到一个优雅的解决方案,我会尝试再次发布。