在C++中添加两个日期
Add two dates in C++
我确信这个问题在其他地方有答案,但我在谷歌或SO上找不到,所以就这样吧。
在C/C++中,我想转换提供的格式为dd hh:mm:ss的相对时间
ps -o etime
到UTC格式的绝对日期。
这似乎不应该很难。假设我已经有了一个函数来产生存储在structtm格式中的相对时间:
struct tm *starting_rel_time = my_reltime_converstion(...);
time_t t = time(0);
struct tm *current_abs_time = localtime(&t);
我想要的基本上与difftime相反:
struct *tm starting_abs_time = current_abs_time - starting_rel_time;
现在,我可以编写自己的函数来进行转换,但由于所有的进位操作和特殊条件(闰年等),这是一场噩梦。在C/C++库中肯定有办法做到这一点吗?
使用Boost::Date_Time库。
通过简单的数学运算将DD-HH:MM::SS
转换为秒;这是相对时间,所以只需要乘和加。然后,以秒为单位查询current time()
(假设它是"相对于现在的"),并添加它们。然后使用gmtime
转换回struct tm
。
没有C/C++这样的语言。
如果你问的是C,我建议用一个简单的数字类型在内部表示日期,只有在必要时才转换为struct tm
。如果您只需要介绍几十年,那么您可以使用time_t
并使用标准的gmtime
和mktime
库函数进行转换。为了覆盖更宽的时间跨度,可以使用儒略日表示。
如果你在问C++,我建议你使用Boost。Date_Time库。当然,如果满足您的需求,C库函数仍然可用。
您想要做的事情没有意义。不能添加两个日期。(difftime
不返回日期,也不返回time_t
。)
在实践中,在大多数(如果不是全部的话)实现中,time_t
将是整型,自某个特定的"epoch"以来的秒数。在这样的机器上,你可以加或减一个整数秒从time_t
获得新的时间,至少如果你一直感兴趣的是time_t
支持的区间(大致介于1970和2038在大多数Unix平台上)。这与CCD_ 14一起,mktime
和localtime
可能足以满足您的需求。笔记尤其是mktime
需要"更正"它的tm
输入:您例如,可以取一个tm
,在字段tm_mday
中加5,调用mktime
,并在未来;所有必要的搬运操作和特殊条件在CCD_ 22中被处理。
如果这还不够,C++11同时具有time_point
和duration
类,具有(快速浏览)似乎具有您可能需要的功能。
- 如何找到两个日期之间的时间差异(以秒和纳秒为单位)?
- CPP 程序二查找两个给定日期之间的天数,conol CMD
- 解决方案在两个日期之间的天数内不起作用
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- C 的两个日期之间的差异
- 如何使用C Win32 API计算两个日期之间的天数
- 连接两个time_t值的日期和时间
- 如何比较C++中的两个日期
- 在C++中添加两个日期
- 两个日期之间的 C++ 日期差异
- 两个对象之间的日期比较
- visual如何在C++中比较两个日期
- 两个日期之间的总天数
- 两个日期之间的秒差
- 用c++计算两个日期的差异
- QDate -在两个日期之间搜索
- 如何比较程序中的两个日期
- C++-比较两个日期
- 比较来自字符串、char*或int的两个日期
- 如何使用boost::date_time获取两个日期之间的天数