zoukankan      html  css  js  c++  java
  • Linux localtime_r调用的一个小问题

    我们一个项目中有如下代码:

    time_t loc_time;

    loc_time = time(NULL);

    localtime_r(&loc_time,&ptr);

    这段代码本意是获取本地时间,用于生成日志中的时间戳。

    但是这个有个问题,当机器的时区变化后,生成的时间信息并不随着时区变化。

    查了localtime_r的man手册,发现有下面一段话:

    According  to  POSIX.1-2004, localtime() is required to behave as though tzset() was called, while localtime_r() does not have this requirement.  

    For portable code tzset() should be called before localtime_r().

    翻译过来就是,调用localtime_r之前应该先调用tzset函数。

    在以上代码localtime_r(&loc_time,&ptr);之前添加tzset()调用后,机器时区变化后,日志中的时间戳也随着时区变化。

    附代码如下:

    time_t loc_time;

    loc_time = time(NULL);

    tzset();   //it is important

    localtime_r(&loc_time,&ptr);

    感兴趣的小伙伴,可以写个简单的测试程序实验一下。

  • 相关阅读:
    win安装Theano
    Photoshop
    Sublime Text与LaTeX的结合
    Python开源库的bug
    Pillow库的学习和使用
    对OpenSSL心脏出血漏洞的试验
    Scrapy的学习和使用
    FreeImage库的学习和使用
    gdal库的学习和使用
    VirtualBox安装Debian
  • 原文地址:https://www.cnblogs.com/smith9527/p/10216830.html
Copyright © 2011-2022 走看看