如何在 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
。
我有一个 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
。