您当前的解决方案很少会给您错误的答案。如果您的两个当地时间恰好跨越您当地时区的 UTC 偏移量变化(例如夏令时转变),那么该转变量将包含在减法中,随后给出错误的答案。
我建议您自己进行解析以获取小时、分钟和秒的值int
s:
int h0, h1;
int m0, m1;
int s0, s1;
然后你可以非常简单地将它们转换为适当的单位并添加/减去它们:
auto d = (hours{h1} + minutes{m1} + seconds{s1})
- (hours{h0} + minutes{m0} + seconds{s0});
的类型d
is seconds
.
在 C++11 中,您有多种解析选项,以下是最简单的选项之一:
ss0 >> h0 >> c >> m0 >> c >> s0;
ss1 >> h1 >> c >> m1 >> c >> s1;
(where c
is a char
来解析:
)
在C++20中会有一个std::chrono::parse
可以这样使用的函数:
seconds d;
ss0 >> parse("%H:%M:%S", d);
或者可以使用"%T"
作为快捷方式"%H:%M:%S"
。我提到这一点是因为您使用的是 C++11,而不是 C++20。但存在一个C++20 chrono 的免费开源预览适用于 C++11/14/17。对于这部分,您只需要标头 date.h,它是一个仅标头的库。
#include "date/date.h"
// ...
seconds d;
ss0 >> date::parse("%T", d);