我需要将字符串转换为使用非英语语言的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