根据文化排序DateTime的组件

时间:2017-08-02 08:41:47

标签: c# date datetime

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

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

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

  

7月2日星期一

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

  

Mandag 2. juli

正如您所看到的,月份和月份的某一天已经切换了位置,“星期一”之后没有逗号,并且在2之后添加了一个句号以表示它是序数。

.NET(或像NodaTime这样的某些库)有没有办法让这种格式开箱即用,或者我是否需要为我们的应用支持的每种语言对其进行硬编码?

2 个答案:

答案 0 :(得分:0)

您可以使用standard format strings日期来获取调用yourDate.ToString(<formatStringHere>)时特定于文化的预定义格式。最接近您要求的那个将是&#34; D&#34;格式字符串,但确实包括年份。

yourDate.ToLongDateString()是另一种获取此格式的方法。

如果可以忽略日期和其他部分之间的,或者可以始终存在,则可以合并"M"格式字符串,该字符串为您提供月份/使用"dddd"自定义格式的日期格式,为您提供日期名称。

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

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

答案 1 :(得分:0)

您可以使用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,