繁体   English   中英

C#日期格式

[英]C# date formatting

这是我遇到过很多次的问题,并且我确定我缺少一个优雅的解决方案。

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

到目前为止,我一直在使用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还是无效? 当然,我不得不检查它没有弄乱其他任何东西,但是它可以工作吗?

您需要从根本上解决问题:数据格式不明确。 如果您不能自己更改数据源,则应使用格式字符串或类似的格式来修饰它们,以便您知道以一种或另一种方式处理整个数据源。

没有这些信息,您将无法可靠地解析数据。

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

  1. TryParse使用用户的文化
  2. 如果失败,则使用区域性不变标志进行解析

如果我正确地理解了您的问题,那将有点超出您的控制范围-如果您从外部来源获得这些日期,则需要知道它们的格式。一旦获得了C#中的DateTime对象,初始格式就没有关系了-它仅包含日期和时间,与格式无关。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM