使用替代日历打印日期

问题描述 投票:0回答:1

我正在为 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 日)?

c winapi
1个回答
0
投票

我想出了如何使用不同的日历获取日期。首先,有必要找到与我们想要的日历关联的区域设置字符串。例如,要在回历中打印,土耳其语言环境 (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
© www.soinside.com 2019 - 2024. All rights reserved.