2017-08-02 55 views
0

说我有一个代表今天的午夜时间DateTime对象(2017年8月2日00:00:00.000)订购基于文化的DateTime的组件

我想采取对象,并在用户目前它可读的方式,包含月份的日期,星期几和月份。

在北美,这是我的理解,将采用以下格式:

周一,7月2日

在挪威,但是,它应该是这样的:

Mandag 2.巨力

正如你可以看到,月份和月份的日期已经切换到地点,“星期一”之后没有逗号,并且在2之后添加了一段时间以表示它是序数。

是否有.NET的方式(或类似NodaTime一些库)来获取这种格式的开箱,否则我将不得不硬编码为每种语言我们的应用程序支持?

+0

你可能要看看切换“区域设置”中的代码取决于正在使用的语言为您的应用。请参阅此处以供参考; https://msdn.microsoft.com/en-us/library/office/dn631825.aspx – SQLAndOtherStuffGuy

+0

每种文化都有它自己的DateTime格式。对于您的应用程序,您可以使用所需的格式作为参数调用DateTime的'.ToString(format)'方法来构建自己的格式。 –

+3

我以为只是调用['ToLongDateString'](https://msdn.microsoft.com/en-us/library/system.datetime.tolongdatestring(v = vs.110).aspx)应该足够了,让文化设置控制外观。 –

回答

0

可以使用standard format strings的日期得到一些预定义的打印格式调用yourDate.ToString(<formatStringHere>)时有特定的文化。最接近你的要求的是“D”格式字符串,但它包括年份。

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

如果有可能,当天与其他部分之间的,可以忽略或始终存在,你可以结合"M"格式字符串,让你与"dddd"自定义格式月/日的格式,让你的一天的名字。

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

但我没有意识到适合您的要求的开箱即用的格式。

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,