我正在为 Windows 开发一个 C 程序。如何使用替代日历(例如回历)打印日期? 我尝试使用 EnumCalendarInfoExEx() 函数并获取特定区域设置的替代日历,例如:
BOOL CALLBACK myCallback(LPWSTR lpCalendarInfoString, CALID Calendar, LPWSTR lpReserved, LPARAM lParam) {
if (iIteration == 1) {
iAlternativeCal = _wtoi(lpCalendarInfoString);
}
iIteration++;
return 1;
}
EnumCalendarInfoExEx(myCallback, L"tr-TR", ENUM_ALL_CALENDARS, NULL, CAL_ICALINTVALUE, NULL);
通过此代码,我可以获得与 Hijiri 日历关联的日历 ID = 6。 我如何使用此信息打印 Hijiri 日历的日期(例如 20 Safar 1445 Hijri 表示 2023 年 9 月 5 日)?
我想出了如何使用不同的日历获取日期。首先,有必要找到与我们想要的日历关联的区域设置字符串。例如,要在回历中打印,土耳其语言环境 (tr-TR) 效果很好。之后,使用 GetDateFormatEx 函数就足够了,如下例所示:
WCHAR formattedDate[256];
SYSTEMTIME systemTime, lt;
GetSystemTime(&systemTime);
GetDateFormatEx(L"tr-TR", DATE_SHORTDATE, &systemTime, NULL, formattedDate, sizeof(formattedDate) / sizeof(WCHAR), NULL);
wprintf(L"Date with alternative calendar: %s\n", formattedDate); //Date with alternative calendar: 6.09.2023
GetDateFormatEx(L"tr-TR", DATE_USE_ALT_CALENDAR | DATE_SHORTDATE, &systemTime, NULL, formattedDate, sizeof(formattedDate) / sizeof(WCHAR), NULL);
wprintf(L"Date with alternative calendar: %s\n", formattedDate); //Date with alternative calendar: 21.02.1445