ar-sa文化的预期日期时间字符串是多少?

我有一个方法

DateToString(DateTime datetime, string format, CultureInfo cultrueInfo) { return datetime.ToString(format, cultureInfo); } 

参数:

 datetime: {10/1/2016 12:00:00 AM} format: "ddd, dd MMM" cultureInfo: {ar-SA} 

但它让我回复了“السبت,30ذوالحجة”。 10月1日是星期六。 为什么它似乎在星期六9月30日回归我? 我身边有什么问题吗?

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 ),因为它是缩写的月份名称。

如您所见,缩写的日期和月份名称在结果中切换。 这可能是一个从右到左的问题。