获取Windows长时间格式

时间:2014-06-08 18:14:23

标签: windows

我正在尝试在Windows中获取长时间格式(例如“hh:mm:ss tt”)。我可以得到这样的短时间格式:

GetLocaleInfoEx(NULL, LOCALE_STIMEFORMAT, format, 100);

我似乎找不到LOCALE_LTIMEFORMAT或类似的常量。我可以获得短时间,短日期和长日期,但如何查询当前用户的长时间格式?

4 个答案:

答案 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与夏令时或时区指示器一样,​​则必须自己格式化。