我需要将字符串转换为非英语语言的 DateTime 对象。我见过许多将 DateTime 转换为其他语言的字符串的示例,但反过来却没有。
这似乎不起作用:
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);
我错过了什么?
最佳答案
如果您知道确切的格式,您可以通过 TryParseExact
强制使用它:
b = DateTime.TryParseExact(sample, "dddd d MMMM yyyy", provider, DateTimeStyles.None, out result);
但是,在您的情况下,这不起作用。为了找到问题所在,让我们反过来试试:
Console.WriteLine(expected.ToString("dddd d MMMM yyyy", provider));
结果是“2011 年 16 月 16 日”,它(您可能比我读得更好)与您的输入有一个字符不同:.NET 使用(并期望)hamza,您的输入没有它。如果我们以这种方式修改输入,一切正常:
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);
关于c# - 如何将 DateTime.TryParse() 用于非英语语言(如阿拉伯语)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5330885/