我正在尝试在Windows中获取长时间格式(例如“hh:mm:ss tt”)。我可以得到这样的短时间格式:
GetLocaleInfoEx(NULL, LOCALE_STIMEFORMAT, format, 100);
我似乎找不到LOCALE_LTIMEFORMAT
或类似的常量。我可以获得短时间,短日期和长日期,但如何查询当前用户的长时间格式?
答案 0 :(得分:3)
据我所知,Windows定义了“长”字样。时间格式为LOCALE_STIMEFORMAT
(设置为" hh:mm:ss"),短时间为LOCALE_SSHORTTIME
(根据MSDN,对Windows 7和更高版本)。
这是否符合您的发现,即它是否与“区域和语言控制面板”项中的用户首选项相匹配?
对于t
说明符,如果它没有包含在语言环境格式中,那么要么总是使用自定义格式(如gbjbaanb表示),要么检查格式字符串是否存在{ {1}}或t
,如果没有自己添加(例如,这可能会导致文化在一般时间之前期望tt
的奇怪结果)。这不应该是必要的,因为语言环境使用的时间格式负责产生有意义的时间字符串(例如,区分AM和PM)。
答案 1 :(得分:3)
您正在寻找的内容已包含在LOCALE_STIMEFORMAT中。示例代码:
wchar_t format[80]; // 80 is always enough
int ret = GetLocaleInfoEx(
LOCALE_NAME_USER_DEFAULT,
LOCALE_STIMEFORMAT,
format,
sizeof(format) / sizeof(*format));
if (ret == 0) die(GetLastError());
std::wcout << format << std::endl;
我机器上的输出(我住在美国):
h:mm:ss tt
&#34; tt&#34;任何不显示AM / PM指示符的文化或区域设置定制都将缺少部分。
答案 2 :(得分:2)
LOCALE_STIMEFORMAT
是长时间格式。要获得短时间格式,您可以从Windows 7或LOCALE_SSHORTTIME
开始使用cut off the seconds。
要确认这一点,只需更改“控制面板”/“区域和语言”设置中的长时间格式。
答案 3 :(得分:0)
尝试将其与LOCALE_S1159和LOCALE_2359常量一起使用,这些常量将返回AM / PM指示符的文本。
我认为问题在于时间格式是一种时间格式,直到第二种格式。如果您希望AM / PM与夏令时或时区指示器一样,则必须自己格式化。