我在SO上查看了 this 和 this ,但它们处理同一问题的非C变体。
使用GNU GCC编译器(Windows中的Code :: Blocks),代码如下:
int main(void)
{
time_t rawtime;
struct tm *info;
char timeStr[80];
time( &rawtime );
info = localtime( &rawtime );
strftime(timeStr,80,"%a %b %d %H:%M:%S %Z %Y", info);
printf("%s", timeStr);
getchar();
return 0;
}
我得到这个时间字符串:
Tue Aug 30 14:55:08 Pacific Daylight Time 2016
除了时区,一切都很好。我更喜欢缩写,例如:
2016年8月30日星期二14:55:08
在 strftime()的每个手册页或windows文档中,我都可以找到格式说明符%Z的描述:时区名称或缩写。 ( eg. here 。)
将时区格式化为缩写的技巧是什么?
答案 0 :(得分:4)
strftime
不保证您是否会获得全名或缩写。它取决于实现。 C99规范(and Microsoft's documentation)说:
%Z由区域设置的时区名称或缩写替换,如果没有时区可确定,则替换为无字符。
AFAIK没有标准的C方式来保证您获得时区缩写。假设您使用系统时区数据库。你可以ship with your own copy of the time zone database。
一般来说,时区缩写是一个坏主意,因为它们不明确。略读the list我们发现ACT,AMT,BST,ECT,GST,IST,LHST,MST,PST和SST都是模棱两可的。您最好使用全名,数字偏移量(即%z
)或完全避开时区并使用UTC(特别适用于记录)。
答案 1 :(得分:2)
我最近需要同样的事情,并确定没有好的答案。我写了一些暴力代码来映射Windows时区字符串,例如"东部标准时间" to" EST",但我知道(a)这是一个坏主意,(b)我的翻译清单永远不会完整。