C++ 在C+中添加两个日期+;

C++ 在C+中添加两个日期+;,c++,c,time,ctime,C++,C,Time,Ctime,我相信这个问题在其他地方都有答案,但我在谷歌上找不到,所以就这样 在C/C++中,我想将相对时间转换为dd hh:mm:ss格式,格式由 ps -o etime 到UTC格式的绝对日期 这看起来不太难。假设我已经有一个函数来生成以struct tm格式存储的相对时间: struct tm *starting_rel_time = my_reltime_converstion(...); time_t t = time(0); struct tm *current_abs_time = loc

我相信这个问题在其他地方都有答案,但我在谷歌上找不到,所以就这样

在C/C++中,我想将相对时间转换为dd hh:mm:ss格式,格式由

ps -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);
我想要的基本上与时间相反:

struct *tm starting_abs_time = current_abs_time - starting_rel_time;

现在,我可以编写自己的函数来进行转换,但由于所有的进位操作和特殊条件(闰年等),这是一场噩梦。在C/C++库中肯定有这样做的方法吗?

使用库。

使用库。

用简单的数学将
DD-HH:MM::SS
转换为秒;这是相对时间,所以只需乘和加。然后,以秒为单位查询
当前时间()
(假设它是“相对于现在”),并添加它们。然后使用
gmtime
转换回
struct tm

使用简单数学将
DD-HH:MM::SS
转换为秒;这是相对时间,所以只需乘和加。然后,以秒为单位查询
当前时间()
(假设它是“相对于现在”),并添加它们。然后使用
gmtime
转换回
struct tm

没有C/C++这样的语言

如果你问的是C,我建议在内部用一个简单的数字类型来表示日期,并且只有在必要时才转换成struct tm。如果只需要覆盖几十年,则可以使用
time\t
并使用标准
gmtime
mktime
库函数进行转换。要覆盖更宽的时间跨度,可以使用表示


如果你问C++,我建议图书馆。当然,如果满足您的需要,C库函数仍然可用。

没有C/C++这样的语言

如果你问的是C,我建议在内部用一个简单的数字类型来表示日期,并且只有在必要时才转换成struct tm。如果只需要覆盖几十年,则可以使用
time\t
并使用标准
gmtime
mktime
库函数进行转换。要覆盖更宽的时间跨度,可以使用表示


如果你问C++,我建议图书馆。当然,如果满足您的需要,C库函数仍然可用。

您试图做的事情没有意义。不能添加两个日期。 (并且
difftime
不返回日期,也不返回
time\t

实际上,在大多数(如果不是所有的话)实现中,
time\t
将是一个 自某个特定“历元”起秒数的整数类型。 在这样的机器上,你可以加减整数秒 从
时间\u t
获取一个新时间,至少在所有时间 感兴趣的是
时间\u t
支持的时间间隔(大致介于 1970年和2038年(在大多数Unix平台上)。这与
gmtime
一起,
mktime
localtime
可能足以满足您的需要。注 特别是需要
mktime
来“纠正”它的
tm
输入:您 例如,可以使用
tm
,在
tm\mday
字段中添加5,调用
mktime
,并在 未来所有必要的运输操作和特殊运输 在
mktime
中处理条件

如果这还不够,C++11既有一个
时间点
又有一个
duration
class,with(快速浏览)似乎拥有所有
您可能需要的功能。

您试图做的没有意义。不能添加两个日期。 (并且
difftime
不返回日期,也不返回
time\t

实际上,在大多数(如果不是所有的话)实现中,
time\t
将是一个 自某个特定“历元”起秒数的整数类型。 在这样的机器上,你可以加减整数秒 从
时间\u t
获取一个新时间,至少在所有时间 感兴趣的是
时间\u t
支持的时间间隔(大致介于 1970年和2038年(在大多数Unix平台上)。这与
gmtime
一起,
mktime
localtime
可能足以满足您的需要。注 特别是需要
mktime
来“纠正”它的
tm
输入:您 例如,可以使用
tm
,在
tm\mday
字段中添加5,调用
mktime
,并在 未来所有必要的运输操作和特殊运输 在
mktime
中处理条件

如果这还不够,C++11既有一个
时间点
又有一个
duration
class,with(快速浏览)似乎拥有所有
您可能需要的功能。

您可以查看boost日期时间库。你是在问C还是C++?它们是不同的语言,每个库都有不同的库。要澄清:我更愿意用C语言编写,或者用C类C++库(例如,Time.h)编写,但是如果他们能更好地使用该工作,可以使用其他C++库。你是在问C还是C++?它们是不同的语言,每个库都有不同的库。请澄清:我更愿意用C语言编写,或者用C类C++库(例如,时间h)编写,但是如果他们能更好地使用C++,那么可以使用其他的C++库,或者如果C++是真正的C++,则可以使用标准。question@SethCarnegie这不能处理日期和日历,或者如果这是C++的标准。question@SethCarnegie:那不处理日期和日历。我强烈建议不要用我的手,您也将错过DST调整