我可以在Windows中缩短时区名称吗?

时间:2013-08-16 11:28:45

标签: mfc timezone

有谁知道如何在Windows中获取缩写的时区名称?

我使用此代码获取时区名称但未获得缩写时区。

time(&ltime);
newtime = localtime(&ltime);
strftime(sDate, 80,"%a, %d %b %Y %H:%M:%S %Z", newtime);

输出: 星期五,2013年8月16日14:45:27印度标准时间

预期产出 星期五,2013年8月16日14:45:27 IST

谢谢,

2 个答案:

答案 0 :(得分:2)

时区缩写没有通用标准。您可以查看列表here,但即便如此,也有一些未列出或含糊不清。

例如,有些人使用HAST代表夏威夷,而其他人则使用HST,因为他们可能不太关心阿拉斯加的阿留申群岛(这是A应该代表的)。

此外,CST之类的值可能是“中央标准时间”(美国),“中国标准时间”或“古巴标准时间”。 EST可以是“东部标准时间”(美国),也可以是“东部标准时间”(澳大利亚)。

我可以一整天都去。关键是,在向人类显示时间时,您应该只使用时区缩写,并且只有在存在其他隐含的上下文(如位置)时才应使用时区缩写。如果你想要这些场景,你需要在你的应用程序中使用一些条件逻辑,任何你需要小心避免做出错误的假设,即偏移可以直接转换为时区或单个缩写。

您可以为完整的IANA / Olson时区提供缩写,但是您需要一个TZDB实现 - 这在Windows上的C语言中不是原生的。有关详细信息,请参阅this question and answer

有一些规范,例如RFC822使用时区缩写,但它们只定义了少数几个,并且主要用于美国。他们往往不会被包括在更现代或具有全球影响的任何事物中。

答案 1 :(得分:0)

docs%Z返回

  

“时区名称或时区缩写,取决于   注册表设置;如果时区未知则没有字符“

所以你很难用strftime

来获得你想要的东西