代码之家  ›  专栏  ›  技术社区  ›  vava

UTC时区的午夜,带有unix时间戳

  •  3
  • vava  · 技术社区  · 15 年前

    我正在寻找日期的数字表示形式,而午夜的unix时间(UTC)似乎是合理的选择。然而,由于我不确定自己的数学技能,我也不确定自己的数学技能

    date = date - date % (24 * 60 * 60);
    

    date unix时间戳是实现这一点的方法吗?有没有更简单的方法?

    3 回复  |  直到 15 年前
        1
  •  5
  •   Greg Hewgill    15 年前

    是的,你的公式是一个很好的方法。完成同样事情的另一种方法是:

    date = (date / 86400) * 86400;
    

    值得注意的是,上述公式假设整数(截断)除法。还有,我觉得 86400

        2
  •  1
  •   ephemient    15 年前

    我将假设C与标准UNIX库一起使用。

    time.h

    #include <time.h>
    
    struct tm date_tm;
    time_t date;
    
    localtime_r(NULL, &date_tm);
    date_tm.tm_sec = 0;
    date_tm.tm_min = 0;
    date_tm.tm_hour = 0;
    
    date = mktime(&date_tm);
    

    我想roundound to string/from string方法也可以,但我不推荐它。( %F %Z

    #define DATE_FORMAT "%F %Z"  /* yyyy-mm-dd t-z */
    
    char date_str[15];
    struct tm date_tm;
    time_t date;
    
    localtime_r(NULL, &date_tm);
    strftime(date_str, sizeof(date_str), DATE_FORMAT, &date_tm);
    strptime(date_str, DATE_FORMAT, &date_tm);
    
    date = mktime(&date_tm);
    

    嗯,一开始我没注意到你想要UTC。由于一个UNIX日保证在UNIX时间内始终为86400 UNIX秒,因此我认为您的原始解决方案没有任何问题。

        3
  •  0
  •   pauljwilliams    15 年前