是否有可能您自己已覆蓋測試PC上日期格式的區域設置?也許你需要使用LOCALE_NOUSEROVERRIDE
標誌。
UPDATE
我已經在這個測試C++
GetDateFormatEx(L"ar-SA", LOCALE_NOUSEROVERRIDE | DATE_AUTOLAYOUT | DATE_LONGDATE, nullptr, nullptr, buf, _countof(buf), nullptr);
所得日期是
06 /محرم/ 1437
UPDATE 2
這顯然取決於Windows如何定義的語言環境。我試過不同的標誌組合(DATE_AUTOLAYOUT | DATE_LONGDATE
,DATE_AUTOLAYOUT | DATE_USE_ALT_CALENDAR | DATE_LONGDATE
,DATE_AUTOLAYOUT | DATE_USE_ALT_CALENDAR
)。雖然"ar-SA"
這給出
06 /محرم/ 1437
06/01/1437
06/01/37
爲"ja-JP"
(日語)它給
2015年10月19日
平成27年10月19日
平成27/10/19
我懷疑(不知道完整的Windows NLS功能),你將有要麼使用特定的格式化字符串,要麼使用其他庫(如ICU)來獲取更多的水平日期。
更新3
它可能沒有得到任何比DATE_AUTOLAYOUT | DATE_USE_ALT_CALENDAR
旗幟和L"dddd, dd MMMM, yyyy gg"
格式更squigly:
الإثنين,06محرم,1437بعدالهجرة
UPDATE 4
進一步搜索發現this:
注:如果你得到了公曆日期與阿拉伯名字,那麼你可能忘了設置日曆類型的回曆。
因此,您的Windows似乎必須在您的區域設置中選擇Hijri日曆,才能使用傳統數字格式化數字。
UPDATE 5
最後,我怎麼檢測到回曆是在這種情況下被使用?
您可以檢測正在使用通過調用GetLocaleInfoEx()
與LOCALE_ICALENDARTYPE
爲LCType
參數和返回的數字與WinNls.h
定義的常量比較日曆:
#define CAL_HIJRI 6 // Hijri (Arabic Lunar) calendar
#define CAL_UMALQURA 23 // UmAlQura Hijri (Arabic Lunar) calendar
但是,我仍然看到識別號碼出現。如果你看看win32時鐘,你將看不到這些。我也實際上_want_用戶指定的日期,我正在測試我的開發機器上的日期格式設置,我想得到一個類似的輸出作爲時鐘。最後,我如何檢測Hijri日曆在這種情況下被使用? – Arafangion
@Arafangion:既然您剛開始提到Python,那麼使用與操作系統無關的區域設置提供程序(如PyICU)怎麼樣?這是一個至少值得考慮的選擇。 – wilx
我已經使用unicode,並且有很好的unicode支持,但是我可以發誓ICU只提供unicode編碼服務 - 我不知道它還提供日期處理和(顯然)日曆服務 - 感謝您檢查它。 – Arafangion