C#解析区域日期时间字符串

时间:2010-10-25 15:29:56

标签: c# .net visual-studio-2005

我正在尝试为一个来自世界各地的客户可以使用的项目创建一个小应用程序。我遇到的问题是后端是使用生成并上传到共享网络的XML文件设置的,在这些XML文件中我存储了一个日期时间变量,表示特定任务何时开始和结束。程序在某些加载间隔崩溃,格式异常,经过一些研究后我发现我需要设置一个区域日期时间解析器。

我的问题是如何在XML文件中转换时间,无论是使用美国,澳大利亚还是英国的区域设置,并让它使用客户端的本地设置。这是使用VS C#2005和.NET 3.5框架完成的。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:8)

后端以标准格式书写。 XML不应该只使用本地日期格式 - 这就是疯狂所在。 XML的要点是计算机的交换格式,而不是人类的交换格式。除非您为人类消费格式化某些内容,否则不应使用本地变体。

因此,要么在任何地方使用特定格式,请在格式化时指定CultureInfo.InvariantCulture,或使用dt.ToString("o")或其他文化不变格式字符串。

如果您只是谈论一个时间点(即当地时间无关紧要,只是全球时刻),您应该确保使用一致的时区,其中UTC是显而易见的选择。例如,使用DateTime.UtcNow代替DateTime.Now

一旦你的代码做了明智的事情,消费就应该非常简单。

但是,如果您没有更改生成代码的奢侈品,那么可能不得不求助于将CultureInfo传递给DateTime.TryParseExact。但是,这意味着您需要知道用于创建文件的文化。如果文件是以文化敏感的方式生成的,并且您不知道他们正在使用哪种文化,那么您基本上就会被填充。例如,03/05/2010可能意味着2010年3月5日或2010年5月3日。如果没有更多信息,您无法决定使用哪个。

答案 1 :(得分:1)

区域设置意味着格式。这是您的主要关注点。格式很简单(使用DateTime.Parse.ParseExact时区应该是您最关心的问题

请参阅How to convert string to local Date Time?