我正在用C语言为Windows开发一个程序.如何使用替代日历(例如Hijri)打印日期? 我try 使用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日历相关联的Calendar ID=6. 如何使用此信息打印Hijiri日历的日期(例如2023年9月5日的20Safar 1445 Hijri)?

推荐答案

我想出了如何使用不同的日历来获取日期.首先,需要找到与我们想要的日历相关联的区域设置字符串.例如,要在Hijri日历中打印,土耳其语区域设置(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

C++相关问答推荐

segfault在C中使用getline()函数

当main函数调用被重构时,C函数给出错误的结果

ATTiny1606定时器TCA 0中断未触发

如何跨平台处理UTF-16字符串?

CC2538裸机项目编译但不起作用

tick.q中的Kdb+键控表语法

C:在编译时构建和使用字符串文字的预处理器宏?

为什么未初始化的 struct 的数组从另一个数组获取值?

在C中包装两个数组?

当内存来自Malloc时,将char*转换为另一个指针类型是否违反了严格的别名规则?

我应该在递归中使用全局变量吗

循环中的静态变量与块中的变量和循环

在文件描述符上设置FD_CLOEXEC与将其传递给POSIX_SPOWN_FILE_ACTIONS_ADCLOSE有区别吗?

共享目标代码似乎不能在Linux上的进程之间共享

为什么argc和argv即使在主函数之外也能工作?

atoi函数最大长-长误差的再创造

x86-64平台上的int_fast8_t大小与int_fast16_t大小

%g浮点表示的最大字符串长度是多少?

一元运算符

使用fread()函数读取txt文件