在C#中处理不同日期格式的最佳方法是什么?使用硬编码动态编码当前文化信息

时间:2014-02-04 00:07:36

标签: c#

示例:“02/03/2014”mm / dd / yyyy(美国)和“03/02/2014”dd / mm / yyyy(法文)。

他们是同一个日期,但世界上不同的地区。

我知道我需要将它们转换为日期对象然后比较它们。

有没有办法从系统中动态提取和设置文化信息,以便日期格式特定于区域而不对文化信息进行硬编码?

硬编码 - Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR");

4 个答案:

答案 0 :(得分:2)

DateTime解析是......很难。

您需要了解输入日期的用户的文化(或至少是他们使用的日期格式,可能是您的用户界面设置的)。没有它,您就无法将文本日期可靠地转换为日期时间对象,如2/3/2014。它可能是

  • 2014年2月3日,如果格式为月/日/年,则为美国的标准,或
  • 2014年3月2日,如果格式为日/月/年,那么世界其他大部分地区都是常态。

如果您了解用户界面文化或使用的格式,则可以使用DateTime的{​​{1}},Parse()TryParse()或{{1 }}

或者你可以推出自己的日期转换方法,因为ParseExact()做出了某些关于分隔符的假设......

你可能想看看Jon Skeet的Noda Time(http://nodatime.org/),但我不知道它是否支持解析。

答案 1 :(得分:1)

如果您有一个代表日期的字符串,例如“2014年12月25日”并且您希望在其上使用Date.Parse,因为您的日期采用美国格式,您的帖子中的文化必须设置为“en-US”http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.currentculture%28v=vs.110%29.aspx

可能,如果您尝试在“2014年1月31日”进行Date.Parse,则会失败。但是,如果你将thread.CurrentCulture设置为“fr-Fr”,它将起作用。

“但是,以同样的格式获取它们的最简单,最有效的方法是什么?”。

DateTime是DateTime。它不以特定格式存储。决定格式的是你的文化。

根据个人经验 - 我们有国际申请,每个用户都可以选择应用程序显示其屏幕的语言以及显示日期的方式。在启动时,我们将确定所选的语言/位置,我们将在线程上设置它。瞧 - 人们现在可以用本地格式输入日期,程序会正确解析它。

答案 2 :(得分:0)

据我了解,潜在的问题是不同的时区。我建议将两者都转换为UTC并对其进行比较。请参阅:http://msdn.microsoft.com/en-us/library/bb397769%28v=vs.110%29.aspx(.NET Framework 4.5 - 但您会得到一般的想法)。

答案 3 :(得分:0)

我发现使用格式和文化是最可靠的方法。

    var date = DateTime.Now;
    var format = new CultureInfo("en-GB");
    var stringDate = date.ToString("d",format);

通过这种方式,您可以确切地知道将独立于系统文化返回的内容。

相关问题