如何以毫秒为单位查找日期之前和之后的整分钟

时间:2017-10-27 10:16:35

标签: c++ chrono ctime

我的时间数有问题,

让我知道这次:05-03-2016 09:45:55.064371,我有一个将其转换为miliseconds的函数(使用epoch(reference_date),使用ctime和chrono库) - > 1457167555064 ,现在我想要找到的是在此时间之前和之后的几分钟的完整分钟,所以在这种情况下我想要的是找到05-03-2016 09:45:00.000000和05-03-2016 09:46:00.000000

我愿意以另一种方式找到日期是否在一分钟之内。

谢谢!

1 个答案:

答案 0 :(得分:4)

最方便的工具是C ++ 17中的新std::chrono::floorstd::chrono::ceil。如果您没有C ++ 17,可以在Howard Hinnant's free, open-source datetime library中预览这些内容:

#include "date/date.h"
#include <iostream>

int
main()
{
    using namespace date;
    using namespace std::chrono;
    sys_time<milliseconds> tp{1457167555064ms};
    sys_time<milliseconds> t0 = floor<minutes>(tp);
    sys_time<milliseconds> t1 = ceil<minutes>(tp);
    std::cout << t0 << '\n';
    std::cout << tp << '\n';
    std::cout << t1 << '\n';
}

输出:

2016-03-05 08:45:00.000
2016-03-05 08:45:55.064
2016-03-05 08:46:00.000

这些时间都是UTC。您似乎的当地时间为UTC +01:00。此GitHub站点上还有一个时区库,您可以使用该库在UTC和本地时间之间或任何两个IANA时区之间进行转换。

以上,sys_time<milliseconds>只是time_point<system_clock, milliseconds>的类型别名。