2017-08-02 45 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,