DataSet.Locale它的作用是什么?

时间:2009-01-09 08:57:33

标签: c# .net datetime dataset

有人可以告诉我使用DataSet.Locale是什么,可以用它来解决这个问题。

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

问题是当我从远程服务器使用WebService检索DataSet时。日期列显示上一个日期。例如,Date Column有“2007年1月14日”,但在检索时显示“2007年1月13日”。

我无法确定原因,因为其他所有事情都正常。

3 个答案:

答案 0 :(得分:1)

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

请查看以下知识库文章了解详情: http://support.microsoft.com/kb/842545

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

答案 1 :(得分:1)

如果DateTime类型的时间部分是12:00:00,您可能会看到问题。如果该值(2007年1月14日凌晨12:00)在美国东部时间提交,那么当您在西部时区(即2007年1月13日中部时间下午11点)在科技日中移动时,它将被抵消

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

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

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

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

Best practices for DateTime serialization in .NET 3.5

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

答案 2 :(得分:0)

该属性用于确定数据集在比较其中的字符串时将使用的区域设置。

有关详细信息,请参阅MSDN参考页面here

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