使用C

时间:2016-08-30 22:13:37

标签: c windows strftime

我在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 。)

将时区格式化为缩写的技巧是什么?

2 个答案:

答案 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)我的翻译清单永远不会完整。