我有一个方法
localValidatorFactoryBean
参数:
DateToString(DateTime datetime, string format, CultureInfo cultrueInfo)
{
return datetime.ToString(format, cultureInfo);
}
但它让我回复了“السبت,30ذوالحجة”。 10月1日是星期六。为什么它似乎在星期六9月30日回归我?我身边有什么问题吗?
答案 0 :(得分:6)
ar-SA
文化使用UmAlQuraCalendar
日历。
new CultureInfo("ar-SA").Calendar.Dump(); // System.Globalization.UmAlQuraCalendar
由于您在ToString
方法中使用了该文化,因此它将基于 日历生成字符串表示。由于您的文化不使用GregorianCalendar
,无法期望生成“九月”。
在UmAlQuraCalendar
中,您的DateTiem将表示为30-12-1437。
var dt = new DateTime(2016, 10, 1); // Gregorian
var umAlQura = new UmAlQuraCalendar();
umAlQura.GetYear(dt); // 1437
umAlQura.GetMonth(dt); // 12
umAlQura.GetDayOfMonth(dt); // 30
https://www.staff.science.uu.nl/~gent0113/islam/ummalqura_converter.htm
这就是原因:
ddd
格式说明符生成了السبت((Yawm) as-Sabt aka Saturday),因为它是缩写的日期名称。dd
格式说明符按预期生成30
。MMM
格式说明符生成ذوالحجة(Dhu al-Hijjah),因为它是缩写的月份名称。如您所见,缩写的日期和月份名称在结果中切换。这可能是一个Right to left问题。