c - 向 tm 结构添加一些间隔

标签 c time-t ctime

我有一个结构tm
我需要添加一些固定间隔(以 xx 年、xx 月、xx 天为单位) 到 tm 结构。
是否有任何标准功能可以执行此操作?

我使用的编译器是 Windows XP 上的 MSVC 2005。

最佳答案

时间格式转换有两个函数:

  1. mktime()struct tm(表示本地时间)转换为 time_t
  2. localtime()time_t 转换为 struct tm 中的本地时间。

Interesing 是第一个,它接受超出范围的结构成员值并作为转换的副产品适本地设置它们(和所有其他值)。这可用于在算术运算后更正字段数据值。然而,字段类型是 int,所以如果 e. G。您添加一年中的秒数。

因此,如果您想获得实际日期,此代码会有所帮助(来自@pmg 的答案的修改副本):

struct tm addinterval(struct tm x, int y, int m, int d) {
    x.tm_year += y;
    x.tm_mon += m;
    x.tm_mday += d;
    mktime(&x);
    return x;
}

另外注意tm_isdst成员,关心一下。当您跳过夏令时切换日期时,它的值可能会导致时间来回移动。

关于c - 向 tm 结构添加一些间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214429/

相关文章:

将 time_t 转换为整数

C指针上的指针: unused variable

c - 以下程序如何在 printf 中运行

c++ - 在 C++ 中将 `time_t` 转换为十进制年份

c++ - 隐式转换 double 到 unsigned long 溢出 c++

c++ - c++ : to store MM in int format from ctime() 中的字符串问题

performance - 1000 万个输入的合并排序

c - C语言可以帮助解决我的难题

c - 为什么这个程序不打印任何东西?

c++ - localtime_s 失败,而 gmtime_s 在 1-1-1970 之前的日期成功