我需要將字符串轉換爲使用非英語語言的DateTime對象。我見過很多將DateTime轉換爲其他語言字符串的例子,但是沒有其他方法。如何將DateTime.TryParse()用於阿拉伯語等非英語語言?
這似乎並不工作:
CultureInfo provider = new CultureInfo("ar-AE"); // Arabic - United Arab Emirates
string sample = "الاربعاء 16 مارس 2011"; // Arabic date in Gregorian calendar
DateTime result;
DateTime expected = new DateTime(2011, 3, 16); // the expected date
bool b;
b = DateTime.TryParse(sample, provider, DateTimeStyles.None, out result);
Assert.IsTrue(b);
Assert.AreEqual(expected, result);
此外,我需要處理那些在其他日曆的字符串。這是我試過的,它似乎也沒有工作。
CultureInfo provider = new CultureInfo("ar-AE"); // Arabic - United Arab Emirates
provider.DateTimeFormat.Calendar = new System.Globalization.HijriCalendar();
// Wednesday, March 16, 2011, 11 Rabi second in 1432
string sample = " 11 ربيع ثاني 1432 ";
DateTime result;
DateTime expected = new DateTime(2011, 3, 16); // ?
bool b;
b = DateTime.TryParse(sample, provider, DateTimeStyles.None, out result);
Assert.IsTrue(b);
Assert.AreEqual(expected, result);
我錯過了什麼?
我認爲有一個阿拉伯語unicode規範化(或類似的)的小問題...我認爲單詞「wednesday」可以用兩種方式編寫...如果您嘗試expected.ToString(「ddd dd MMMM yyyy 「,provider)你會看到字符串看起來是一樣的,但不是二進制相等的。你的第二個字符是0x0627(阿拉伯字母ALEF),ToString一個是0x0623(阿拉伯字母ALEF WITH HAMZA ABOVE)。我不知道阿拉伯的任何東西,但我希望這會幫助你。 – xanatos 2011-03-16 23:10:55