计算C中NSDates之间的秒数

Calculate seconds between NSDates in C

本文关键字:之间 NSDates 计算      更新时间:2023-10-16

我正在编写一个Arduino脚本,它是C/C++。该脚本的关键功能之一是从API读取日期,并计算到该日期时间还有多少秒。

一个典型的值是2016-04-10T02:36:00+02:00,看起来像NSDate。我在Objective-C中找到了很多解决方案来实现我想要的,但在C/C++中没有。

如有任何帮助,我们将不胜感激。

若要计算C中以秒为单位的差异,请使用difftime(),它将返回以秒表示的差异。

double difftime(time_t time1, time_t time0);

如果需要,请使用time()获取当前时间。它确定当前日历时间。

time_t time(time_t *timer);

所以剩下的就是如何将"2016-04-10T02:36:00+02:00"这样的字符串带入time_t

  1. 把字符串分成数字部分。

    if (8 == sscanf(buf, "%d-%d-%dT%d:%d:%d%d:%d", &y, &m, ..., &tzh, &tzm)) Success();
    
  2. y,m,d ...转换为struct tm

    struct tm tm = {0};  // Important to first zero fill
    tm.tm_year = y - 1900;
    tm.tm_mon = m - 1;
    tm.tm_mday = d;
    ...
    tm.tm_hour = H + tzh;
    tm.tm_min = M + tzm*sign(tzh);
    tm.tm_sec = S;
    
  3. struct tm(世界时)转换为time_t。这一步很难,因为C没有提供明确的标准方法。这是一个合理的可移植方法。有关其他方法,请参阅帖子的其余部分。

请注意,自1970年以来,没有做出(或需要)关于time_t是秒的假设,也没有关于struct tm只有9个字段的假设。