我确定这个问题在其他地方得到了解答,但我无法在Google或SO上找到它,所以就这样了。
在C / C ++中,我想转换格式为dd -hh:mm的相对时间:由
提供的ssps -o etime
到绝对UTC格式的日期。
这似乎不应该很难。假设我已经有一个函数来生成以struct tm格式存储的相对时间:
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 ++库中做到这一点吗?
答案 0 :(得分:3)
使用Boost::Date_Time个库。
答案 1 :(得分:2)
使用简单的数学运算将DD-HH:MM::SS
转换为秒;它是相对时间,所以只需乘法和加法。然后,以秒为单位查询current time()
(假设它是“相对于现在”),并添加它们。然后使用gmtime
转换回struct tm
。
答案 2 :(得分:1)
没有C / C ++这样的语言。
如果你问的是C,我建议用一个简单的数字类型在内部表示日期,并仅在必要时转换为struct tm
。如果您只需要覆盖几十年,那么您可以使用time_t
并使用标准gmtime
和mktime
库函数进行转换。为了覆盖更广泛的时间跨度,您可以使用Julian day表示。
如果你问的是C ++,我建议使用Boost.Date_Time库。当然,如果满足您的需求,C库函数仍然可用。
答案 3 :(得分:0)
你想要做的事情没有意义。您无法添加两个日期。
(并difftime
不会返回日期,也不会返回time_t
。)
在实践中,在大多数情况下,如果不是所有实现,time_t
将是一个
积分类型,具有自某些特定“纪元”以来的秒数。
在这样的机器上,您可以添加或减去整数秒
从time_t
获得新的时间,至少在所有时间都是如此
感兴趣的是time_t
所支持的区间(大致在...之间)
1970年和2038年在大多数Unix平台上)。这与gmtime
一起,
mktime
和localtime
可能足以满足您的需求。注意
特别需要mktime
来“纠正”它的tm
输入:你
例如,可以使用tm
,向字段tm_mday
添加5,然后调用
mktime
就可以了,并获取日期中五天的正确值
未来 - 所有必要的携带操作和特殊
条件在mktime
处理。
如果这还不够,C ++ 11同时具有time_point
和a
duration
课程,(从快速浏览一下)似乎拥有全部
你可能需要的功能。