Reputation: 154
In an application I'm writing I want to display the current date and time, in English, but also in other locales.
For example Russian, Arabic and Chinese.
// DateTime.ToLongDateString doesn't support a IFormatProvider parameter
DateTime.Now.ToString("dddd, d MMMM, yyyy", new CultureInfo("en-US"));
// "Wednesday, 7 August, 2013"
DateTime.Now.ToString("dddd, d MMMM, yyyy 'r.'", new CultureInfo("ru-RU"));
// "среда, 7 августа, 2013 r."
Works fine...
DateTime.Now.ToString("dddd٫ d MMM٫ yyyy", new CultureInfo("ar"));
// "الأربعاء٬ 30 رمضان٬ 1434"
Seems to work fine.
However... I'd like to show the numerals as (Eastern) Arabic numerals, not as Latin/Arabic numerals. Though this could of course be solved by doing a simple substitution ('٠' to '0', 1 to '١' etc).
But then there's Chinese:
DateTime.Now.ToString("yyyy年M月d日dddd", new CultureInfo("zh-CN"))
// "2013年8月7日星期三"
Chinese numerals seem to be quite a bit more complex than just doing a simple substitution; sometimes one character becomes 2. Next to that, The formatted date seems to show the current Gregorian date, not the current Chinese date.
So my question is:
A) Is there any localization functionality in .NET/C# to display numbers (specificly dates) in other numeralsystems?
B) Can i force .NET/C# to display dates in the Chinese (and possibly Japanese and other) calendars, as it seems to do with the Arabic calendar?
Upvotes: 7
Views: 4259
Reputation: 3294
Play with ToLongDateString()
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");
var myDate = DateTime.Now.ToLongDateString();
value for myDate: 2013年8月7日
Upvotes: 1
Reputation: 74277
See these questions (and answers):
How can I display culture-specific native digits instead of Arabic numerals?
MSDN: http://msdn.microsoft.com/en-us/library/system.globalization.digitshapes.aspx
As to whether that will work with all languages? ...I wouldn't bet on it, especially in cultures like that of China where there are multiple ways and context-sensitive usage.
Upvotes: 0