如何使用Boost获取分钟精度的UTC时间(移除秒数)
解决Boost ptime分钟精度UTC时间输出问题
嘿,这个需求很容易实现,我给你两种常用的方案,你可以根据自己的场景选择:
方案一:截断ptime对象的秒数(推荐用于后续还要使用该时间对象的场景)
如果需要后续基于这个时间做其他操作,直接修改ptime对象,把秒及更小的时间单位设为0是更稳妥的方式:
#include <iostream> #include <boost/date_time/posix_time/posix_time.hpp> using namespace boost::posix_time; using namespace boost::gregorian; int main() { auto timeUTC = second_clock::universal_time(); // 提取日期部分 date date_part = timeUTC.date(); // 构造只保留小时和分钟的时间片段,秒数设为0 time_duration time_part = hours(timeUTC.time_of_day().hours()) + minutes(timeUTC.time_of_day().minutes()); // 生成截断后的分钟精度ptime ptime truncated_time(date_part, time_part); // 输出结果,格式就是你要的2020-06-29T23:06:00 std::cout << to_iso_extended_string(truncated_time) << std::endl; return 0; }
这个方法的核心是把原时间的time_of_day()拆分成小时和分钟,重新组合成没有秒数的time_duration,再和日期拼接成新的ptime。
方案二:自定义格式化输出(适合仅需要特定格式输出的场景)
如果只是输出时需要去掉秒数,不需要修改原ptime对象,可以直接用Boost的时间格式化功能,固定输出秒为0:
#include <iostream> #include <locale> #include <boost/date_time/posix_time/posix_time.hpp> using namespace boost::posix_time; int main() { auto timeUTC = second_clock::universal_time(); // 创建自定义格式的时间 facet time_facet* output_facet = new time_facet("%Y-%m-%dT%H:%M:00"); // 将facet注入到cout的本地化设置中 std::cout.imbue(std::locale(std::cout.getloc(), output_facet)); // 直接输出原ptime,会按照自定义格式显示 std::cout << timeUTC << std::endl; return 0; }
这里用%Y-%m-%dT%H:%M:00作为格式化规则,其中%Y是四位年份,%m是两位月份,%d是两位日期,%H是24小时制的小时,%M是分钟,最后固定写:00来替代秒数部分。
内容的提问来源于stack exchange,提问作者NJMR
相关产品推荐
相关产品推荐

