【问题标题】:Re-format datetime to 7th November 2014将日期时间重新格式化为 2014 年 11 月 7 日
【发布时间】:2014-11-25 06:42:21
【问题描述】:

我自己有一个DateTime 的变量

7/11/2014 

我想将该日期转换为显示为

7th November 2014

我使用什么格式?我试过ToLongDateString,但它错过了日期的后缀。

【问题讨论】:

标签: c# asp.net datetime


【解决方案1】:

我不相信 .NET 中对序数(“st”、“nd”、“th”)有任何直接支持。如果你只需要支持英文,我建议你自己硬编码。例如:

string text = string.Format("{0}{1} {2} {3}", dt.Day, GetOrdinal(dt.Day),
                            dt.ToString("MMMM"), dt.Year);

(你自己写GetOrdinal。)请注意,这假设你想要完全这种格式 - 例如,不同的文化(即使在英语中)可能更喜欢November 7th 2014。

如果您需要支持各种语言,这将变得非常困难 - 不同的语言对序数有一些非常不同的方法。

旁注:即使Noda Time 还没有处理这个问题。我希望最终实现一些CLDR 支持,理论上应该为所有语言环境处理它。我们拭目以待……

【讨论】:

  • 还可以考虑将此格式作为 DateTime 的扩展方法,并将其粘贴到您的个人标准库中。
  • 附带说明,Humanizer 是一个很棒的 .NET 项目,用于将数字转换为序数或基数或其他任何内容。
  • @icemanind:很有趣。好像没有用到 CLDR 数据,看起来有点可惜,不过还是个有趣的项目。
  • @JonSkeet - 我认为你是对的。但作为一个开源项目,希望有一天,CLDR 数据可以被编程到其中。不幸的是,这可能是一项艰巨的任务。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 2014-10-21
相关资源
最近更新 更多