2

有人可以告诉我 DataSet.Locale 的用途是什么,它可以用来解决这个问题吗?

我的服务器位于美国,我正在对其进行查询。远程服务器(美国)和本地的表中包含的数据相同。

问题是当我使用远程服务器的 WebService 检索数据集时。日期列显示上一个日期。例如,日期列具有“2007 年 1 月 14 日”,但检索时显示“2007 年 1 月 13 日”。

我无法确定原因,因为其他一切工作正常。

4

3 回答 3

1

听起来像是一个已知的 TimeZone 问题:更改 DataSet.Locale 无济于事。

查看以下知识库文章了解更多信息:http://support.microsoft.com/kb/842545

另请查看 DataColumn.DateTimeMode 属性,该属性控制 DateTime 列的序列化格式。将其设置为 DataSetDateTime.Unspecified 可确保在序列化时不添加偏移量。

于 2009-01-09T09:17:48.253 回答
1

如果 DateTime 类型的时间部分是 12:00:00,您可能会看到该问题。如果该值(2007 年 1 月 14 日上午 12:00)在 EST 中提交,那么当您穿越西部时区时它会被抵消(即 CST 中的 2007 年 1 月 13 日晚上 11:00)

解决此问题的最佳方法是确保以不变类型存储 DateTime 数据(将其转换为 UTC pr GMT)。然后,当您找到需要数据的任何消费者时,他们可以将数据更改为特定于区域设置的表示形式。如果您无法控制数据的保存方式,则只需确保在检索时将其转换为不变类型,然后再将其返回给客户端。

@Joe 引用的链接很有用,否则这里有一份相当大的白皮书,详细介绍了有关该问题的最佳实践。

http://msdn.microsoft.com/en-us/library/ms973825.aspx

这里还有一个关于一些新技术的堆栈溢出 Q'n'A。

.NET 3.5 中 DateTime 序列化的最佳实践

注意:在我添加的第一个链接中,有一个有趣的点是关于其中一些日期类型的序列化,这取决于您是否仍在 1.1/2.0 堆栈上。请注意这一点,因为它被我咬了几次;-)

于 2009-01-10T04:19:10.627 回答
0

该属性用于确定数据集在比较其中的字符串时将使用的语言环境。

有关详细信息,请参阅此处的 MSDN 参考页面。

编辑:仅参考您的问题:“本地”机器在哪里?你不是有机会越过日期线到服务器吗?

于 2009-01-09T09:03:48.343 回答