c# - 如何将 DateTime.TryParse() 用于非英语语言(如阿拉伯语)?

标签 c# parsing datetime globalization

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

相关文章:

python - Pandas 数据框适用于日期时间列 : does not work

python - matplotlib datetime xlabel 问题

c# - 为什么 c# 程序员不像 java 程序员那样被 ruby​​ 吸引

javascript - 从 Xamarin Forms 中的 WebView 获取数据

java - 编码 URL 查询参数

parsing - 指定在 lisp 中返回哪个值

python - Pandas 的日期时间默认为 1970

c# - 可空类型的方法

C# ASP.NET 应用程序正则表达式

python - PyYAML:加载和转储 yaml 文件并保留标签 (!CustomTag)