【问题标题】:What is expected datetime string for ar-sa culture?ar-sa 文化的预期日期时间字符串是什么?
【发布时间】:2017-01-13 03:25:11
【问题描述】:

我有一个方法

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 类,每个月有 29 天或 30 天。 msdn.microsoft.com/en-us/library/…
  • 我找到了这个,它似乎只是将它转换为 30,这是正确的。
  • 顺便说一句,如果它调用DateTime.ToString(string, IFormatProvider)方法,您真的不需要该方法。只需致电datetime.ToString(format, cultureInfo)

标签: c# string datetime locale


【解决方案1】:

ar-SA 文化使用UmAlQuraCalendar 日历。

new CultureInfo("ar-SA").Calendar.Dump(); // System.Globalization.UmAlQuraCalendar

由于您在 ToString 方法中使用了该文化,它将根据 that 日历生成字符串表示。您不能期望生成“September”,因为您的文化不使用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 又名星期六),因为它是缩写的日期名称。
  • dd 格式说明符按预期生成 30
  • MMM 格式说明符会生成 ذو الحجة (Dhu al-Hijjah),因为它是月份的缩写名称。

如您所见,结果中切换了缩写的日期和月份名称。这可能是Right to left 问题。

【讨论】:

  • 实际上我也有同样的问题,但没有解决我已将我的日期转换为“24/جمادى الثانية/1439 12:00 ص”现在我必须将其格式化为 dd/毫米/年年。任何clu ..?
  • 感谢您的详细回答。我已经投票并整理了所有事情,除了我想展示我不能展示的年份:(
猜你喜欢
  • 1970-01-01
  • 2021-07-11
  • 2019-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
相关资源
最近更新 更多