【问题标题】:Get unix time from date从日期获取Unix时间
【发布时间】:2013-04-07 11:47:11
【问题描述】:

我有以下变量:

int year = 2013;
int month = 04;
int day = 07;
int hour = 13;
int min = 42;
int sec = 00;

...我需要从中提取“纪元”时间或 unix 时间。

如何在标准 C 中做到这一点? 在这种情况下,unix 时间应该是:1365342120

【问题讨论】:

    标签: c date time


    【解决方案1】:

    如果您从未使用过此结构,则上述答案遗漏了一些您可能不会注意到的事情:

    struct tm myTm = {
    .tm_sec = sec,
    .tm_min = min,
    ...
    .tm_mon= mon-1,
    .tm_year= year-1900,
    
    };
    
    time_t t = mktime(&myTm);
    printf("%ju\n", (uintmax_t) t);
    

    你应该把月份减去 1,把年份减去 1900,否则你会得到错误的答案。

    【讨论】:

      【解决方案2】:

      怎么样:

      struct tm tm = {
          .tm_sec = sec,
          .tm_min = min,
          ...
      };
      
      time_t t = mktime(&tm);
      printf("%ju\n", (uintmax_t) t);
      

      正如 Mppl 指出的,在使用它之前,您应该了解struct tm 的怪癖:

      • tm_mon 定义为自一月以来的月份,因此需要从月份中减去 1
      • tm_year 定义为自 1900 年以来的年数,因此您需要从年份中减去 1900

      在一个更迂腐的旁注中,没有什么能保证将 t 转换为整数会自动为您提供自 1970 年以来的秒数。它适用于许多系统,但标准对此没有任何规定。

      如果你想达到标准的疯狂,你可以创建另一个 time_t 代表 1970,然后在两者之间创建一个 difftime:你会得到一个普通的 double 的区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-28
        • 1970-01-01
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        相关资源
        最近更新 更多