【问题标题】:c# Date format not showing local formatc#日期格式不显示本地格式
【发布时间】:2015-04-22 10:22:34
【问题描述】:

在我的本地机器上,我的 Thread.CurrentThread.CurrentCulture 返回正确的本地文化 (en-GB)。日期格式设置为 yyyy-MM-dd。

在代码中,当我运行时:

value.ToShortDateString()

它返回"6/2/2010" (m/d/yyyy)。

我怎样才能让它根据当地文化进行展示?我不想对格式进行硬编码,因为该应用程序将部署在不同的国家/地区,因此它应该根据本地 PC 设置工作。我还在 en-US 上进行了测试,它显示的结果相同。

我的'value'变量的值是:

{6/2/2010 12:00:00 AM}
    Date: {6/2/2010 12:00:00 AM}
    Day: 2
    DayOfWeek: Wednesday
    DayOfYear: 153
    Hour: 0
    Kind: Unspecified
    Millisecond: 0
    Minute: 0
    Month: 6
    Second: 0
    Ticks: 634110336000000000
    TimeOfDay: {00:00:00}
    Year: 2010

【问题讨论】:

  • value.ToShortDateString() 仅根据本地桌面配置返回动态格式。查看我的答案以获得更多解释。
  • 我不明白你的问题。你说;你的CurrentCultureen-GB 并询问我怎样才能让它根据当地文化显示?。你已经ToShortDateString做到了。你到底想要什么结果?改为yyyy-MM-dd 格式? m 说明符是分钟,M 说明符是几个月。格式说明符区分大小写。
  • @Soner:ToShortDateString 返回美国格式 2010 年 6 月 2 日。我希望它根据当地文化返回,即 2010-06-02。

标签: c# date-format


【解决方案1】:

只需调用ToString() 而不是ToShortDateString() 并指定您的日期格式:

    DateTimeFormatInfo formatInfo = CultureInfo.CurrentUICulture.DateTimeFormat;
    var value = DateTime.Now.ToString(formatInfo);

虽然ToShortDateString() 应该是文化敏感的as per the documentation

当前 DateTime 对象的值使用与当前线程区域性关联的 DateTimeFormatInfo.ShortDatePattern 属性定义的模式进行格式化。返回值与使用 ToString(String) 方法指定“d”标准 DateTime 格式字符串返回的值相同。

但是,如果 CurrentCulture 和 CurrentUICulture 不同,它可能会返回错误的格式。为了安全起见,我在代码示例中使用了 CurrentUICulture,因为它基于用户的 UI 文化设置——例如美国系统上的英国语言包等,应该是正确的。

【讨论】:

  • Tx - 我可能应该在问题中说出来,但它需要根据文化动态。当我们在其他国家部署时,我们不希望它被硬编码。我会更新问题。
  • @user1208908 更新了答案以考虑到这一点。
  • 我试过你的解决方案,它返回“4/22/2015 2:43:01 PM”,仍然是美国格式。
  • @user1208908 您的 CurrentUICulture 设置为什么? en-US 还是 en-UK?
  • @user1208908 很奇怪,DateTimeFormatInfo formatInfo = new CultureInfo("en-GB").DateTimeFormat; 使用 DateTime.Now.ToString 与 CultureInfo 为我返回(正确)日期:22/4。
【解决方案2】:

ToShortDateString 方法应该对文化敏感 - 它使用的格式由当前文化的 DateTimeFormatInfo 对象控制。你检查过这是你所期望的吗?

(这真的应该是一个评论,因为它不是一个明确的答案/修复 - 不幸的是我没有足够的声誉来发表评论。)

【讨论】:

  • 这就是我在阅读link 时要提交的内容。投票让您能够发表评论...
  • 干杯 - 非常感谢。
【解决方案3】:

在 ToString() 中指定文化:

DateTime.Now.ToString(CultureInfo.CurrentCulture);

【讨论】:

  • 解决方案返回“2/18/2014 12:00:00 AM”。还是格式不对。
【解决方案4】:

ToShortDateString() 的简单调用从本地获取输入格式 桌面。它将显示本地窗口中配置的日期字符串 桌面。

  • 如果本地配置是 15/4/22 (yy/m/dd),则输出将为 15/4/22
  • 如果本地配置是 4/22/2015 (m/dd/yyyy),输出将为 4/22/2015

可以在更改日期和时间设置下更改本地配置>> 更改日历设置 >> 更改日期格式

(当我提到本地配置时,我的意思是日期格式显示在窗口任务栏的右下角。)

【讨论】:

  • 嗯,这就是它的工作原理,这也是问题的部分原因。它不以该格式显示日期。
  • 您使用的是哪个 .net 版本?它的工作方式与我这里描述的完全一样。
  • Visual Studio 专业版 2013
猜你喜欢
  • 2017-08-16
  • 2012-05-13
  • 2011-01-08
  • 2010-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-03-19
  • 1970-01-01
  • 2016-07-07
相关资源
最近更新 更多