C#日期格式化

时间:2009-08-18 14:24:01

标签: c# datetime

这是我遇到的一个问题,我确信这是一个我缺少的优雅解决方案。

我在c#中有一些DateTime变量,我从各种SQL表/网站/ Web服务发送,通常以字符串形式发送。问题是这些来源中的一些被设置为英语(美国),一些被设置为英语(英国)。我无法控制其中的一些,因为我非常希望将它们全部用于一种文化或另一种文化。

到目前为止,我一直在使用CultureInfo对象转换它们,以正确格式化:

CultureInfo ci = new CultureInfo("en-GB");
Convert.ToDateTime(inputDateTimeString, ci);

然而,最近我才知道转换不知道原始DateTime所处的文化(正如我所说,可能是美国或英国),因为它只是一个字符串。

如果是日期字符串,比如说“06/15/2009”,这很好,因为转换识别'15'不能是月份。但是,日期字符串“06/07/2009”将始终有效,但是,根据原件是美国还是英国,它可能指的是不同的日期和月份。

是否有一种更好的可接受的方法来处理DateTime,从而减少这些歧义?感谢。

编辑: 是的,所以似乎没有可靠的方法来始终转换成正确的格式,因为我的信息是有限的。

这些DateTime字符串的一个来源是.dll我无法控制。但是,我可以控制此.dll用于访问存储信息的数据库的SQL登录。如果我要将此登录的语言设置更改为英式英语(目前是美国英语),它会以该格式检索DateTime,还是会无效?我必须检查一下它没有搞砸其他任何东西,但它可能有效吗?

3 个答案:

答案 0 :(得分:7)

您需要从源头解决问题:您将以模糊格式获取数据。如果你不能自己更改数据源,你应该使用格式字符串或类似的东西来装饰它们,以便你知道以某种方式处理整个数据源。

如果没有这些信息,您只需无法可靠地解析数据。

答案 1 :(得分:0)

我通常做的(使用任何解析)是:

  1. 使用用户文化的TryParse
  2. 如果失败,请使用文化不变标志
  3. 进行解析

答案 2 :(得分:0)

如果我正确理解你的问题,这有点超出你的控制范围 - 如果你从外部来源获得这些日期,你需要知道它们的格式。一旦你在C#中获得一个DateTime对象,初始格式就不会无论如何 - 它只包含日期和时间,无论格式如何。

另一方面,为什么不从数据库中将它们作为某种日期时间数据库格式?