如何使用Boost库以dd / mm / yyyy H格式打印当前日期?
我有什么:
boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
cout << boost::posix_time::to_simple_string(now).c_str();
2009-Dec-14 23:31:40
但我想:
14-Dec-2009 23:31:40
答案 0 :(得分:79)
如果您正在使用Boost.Date_Time,则可以使用IO方面完成此操作。
您需要包含boost/date_time/posix_time/posix_time_io.hpp
才能获得wtime_facet
的正确facet typedef(time_facet
,boost::posix_time::ptime
等)。完成后,代码非常简单。您可以在要输出的ostream
上调用imbue,然后输出您的ptime
:
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
using namespace boost::posix_time;
using namespace std;
int main(int argc, char **argv) {
time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S");
cout.imbue(locale(cout.getloc(), facet));
cout << second_clock::local_time() << endl;
}
输出:
14-Dec-2009 16:13:14
另请参阅提升文档中的list of format flags,以防您希望输出更高级的内容。
答案 1 :(得分:0)
使用{fmt} library,您可以按以下要求的格式打印日期:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <fmt/time.h>
int main() {
auto now = boost::posix_time::second_clock::local_time();
fmt::print("{:%d-%b-%Y %H:%M:%S}\n", to_tm(now));
}
此格式化工具正建议用于C ++ 20:P0645。
或者,您可以使用C ++ 11中引入的std::put_time
:
#include <boost/date_time/posix_time/posix_time.hpp>
#include <iomanip>
#include <iostream>
int main() {
boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
auto tm = to_tm(now);
std::cout << std::put_time(&tm, "%d-%b-%Y %H:%M:%S");
}
免责声明:我是{fmt}的作者。