如何使用DateTime.TryParse()作为非
我需要将字符串转换为使用非英语语言的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年1月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);
DateTime result = DateTime.Parse("الاربعاء 16 مارس 2011", new CultureInfo("ar-JO"));
但是你可以检查文档:CultureInfo Class
可能是这样的:
int Year, DayOfMonth;
string Month;
string[] Months = new string[] {"ينایر","فبرایر","مارس","ابریل","مایو",...};//these texts are writen with persian keyboard,change the ی with ي ,its really hard with my keymap
string[] Splits = Input.Split(" ");
foreach(string Split in Splits)
{
if(Months.Contains(Split))
{
Month = Months.IndexOf(Split);
}
else
{
int Number;
if(int.TryParse(Split, out Number))
{
if(Number<32)
{
DayOfMonth=Number;
}
else
{
Year=Number;
}
}
}
}
如果你打算支持多个日历:
您应该在该数组中按顺序添加所有日历月。
十二月之后应该会有下一个日历月(rabi-ol-avval,rabi-ol-thani ......)
然后
int CalendarId = Month / 12;
月份%= 12;