如何在 windows 上获取具有相同时间格式的本地时间?

How get a local time with same time format on windows?

我有一个 c++ class 代码,return 当地时间:

SYSTEMTIME sm;
GetLocalTime( &sm );

但是 sm.wHour 总是 return 以 24 格式表示一小时,这与我的 windows os 时间格式设置无关!! (即使用 24 或 12 时间格式)。

如何根据我的 windows os 时间格式设置获取本地时间?

刚发现GetDateFormatA已经过时了,你应该用GetDateFormatEx

简单示例:

#include <windows.h>
#include <iostream>
#include <io.h>
#include <fcntl.h>

int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);

    const int len = 50;
    LPWSTR date = new WCHAR[len];
    GetDateFormatEx(LOCALE_NAME_USER_DEFAULT, DATE_AUTOLAYOUT, NULL, NULL, date, len, NULL);

    LPWSTR time = new WCHAR[len];
    GetTimeFormatEx(LOCALE_NAME_USER_DEFAULT, 0, NULL, NULL, time, len );

    std::wcout << date << std::endl << time;
    return 0;
}

如果您对 api 参数有疑问,您可能会发现 msdn 中的 GetDateFormatEx and GetTimeFormatEx 很有用。

对于 _setmode(_fileno(stdout), _O_U16TEXT);,在 windows 控制台下打印 unicode 是一种 hack。 您可以参考this answer

注意上面的 WinApis 依赖于 long time format,而不是短时间格式。

虽然我找不到 api 的短时间格式。如果您想要不包括秒的时间格式,请使用 TIME_NOSECONDS 而不是 LOCALE_NAME_USER_DEFAULT