【问题标题】:Ordering a DateTime's components based on culture根据文化对 DateTime 的组件进行排序
【发布时间】:2017-08-02 08:41:47
【问题描述】:

假设我有一个 DateTime 对象,它代表今天午夜的日期 (2017-08-02 00:00:00.000)

我想获取该对象并以用户可读的方式呈现它,其中包含月日、星期几和月。

在北美,我的理解是它的格式如下:

7 月 2 日,星期一

然而,在挪威语中,它看起来像这样:

曼达格2.juli

如您所见,月份和月份的日期互换了位置,“星期一”之后没有逗号,并且在 2 之后添加了句点以表示它是序数。

.NET(或像 NodaTime 之类的库)中是否有办法让这种格式开箱即用,还是我必须针对我们的应用支持的每种语言对其进行硬编码?

【问题讨论】:

标签: c# date datetime


【解决方案1】:

您可以将standard format strings 用于日期,以便在调用yourDate.ToString(<formatStringHere>) 时获得一些特定于文化的预定义格式。最接近您要求的是“D”格式字符串,但它确实包含年份。

yourDate.ToLongDateString() 将是获得这种格式的另一种方式。

如果日期和另一部分之间的, 可能被忽略或始终存在,您可以将提供月/日格式的"M" 格式字符串与"dddd" 自定义组合为您提供日期名称的格式。

var dateString = $"{yourDate.ToString("dddd")}, {yourDate.ToString("M")}"

但我不知道是否有适合您要求的开箱即用格式。

【讨论】:

    【解决方案2】:

    您可以使用DateTimeFormat.LongDatePattern 获取长日期格式并删除年份部分。

    例如:

    DateTime d = new DateTime(2017, 01, 10);
    CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
    string s = culture.DateTimeFormat.LongDatePattern;
    s = s.Replace("y", "");
    Console.WriteLine(d.ToString(s));
    

    虽然这样做你可能会得到一些奇怪的输出。这将输出:

    Tuesday, January 10,

    【讨论】:

      猜你喜欢
      • 2011-12-28
      • 2020-11-18
      • 2016-11-17
      • 2013-09-30
      • 1970-01-01
      • 2017-07-18
      • 2021-12-09
      • 2015-01-20
      • 2018-11-01
      相关资源
      最近更新 更多