将带有参考时间的时间戳转换为格式化时间
Convert timestamp with reference time to formatted time
我想将时间戳转换为格式化时间。
时间戳是一个双精度值(例如时间戳 = 41274.043),参考日期从 1.1.1900 00:00 开始,应该 return 类似于 02.01.2017 01:01.
我找不到任何关于如何正确设置参考时间的信息。有什么建议吗?
要自定义日期,我会使用 strftime(),STL 是必需的...
BR
jtotheakob
使用Howard Hinnant's free, open source, header-only library可以这样做:
#include "date/date.h"
#include <iostream>
std::chrono::system_clock::time_point
to_chrono_time_point(double d)
{
using namespace std::chrono;
using namespace date;
using ddays = duration<double, days::period>;
return sys_days{January/1/1900} + round<system_clock::duration>(ddays{d});
}
int
main()
{
std::cout << date::format("%d.%m.%Y %H:%M\n", to_chrono_time_point(41274.043));
}
这只是将 double
转换为具有 double
表示和 days
句点的 chrono::duration
,然后将 duration
舍入为system_clock::duration
,最后将该持续时间添加到 1.1.1900 00:00。结果是 std::chrono::system_clock::time_point
.
std::chrono::system_clock::time_point
可以使用来自相同库的 date::format
进行格式化,如图所示。这个程序的输出是:
02.01.2013 01:01
我想将时间戳转换为格式化时间。 时间戳是一个双精度值(例如时间戳 = 41274.043),参考日期从 1.1.1900 00:00 开始,应该 return 类似于 02.01.2017 01:01.
我找不到任何关于如何正确设置参考时间的信息。有什么建议吗? 要自定义日期,我会使用 strftime(),STL 是必需的...
BR
jtotheakob
使用Howard Hinnant's free, open source, header-only library可以这样做:
#include "date/date.h"
#include <iostream>
std::chrono::system_clock::time_point
to_chrono_time_point(double d)
{
using namespace std::chrono;
using namespace date;
using ddays = duration<double, days::period>;
return sys_days{January/1/1900} + round<system_clock::duration>(ddays{d});
}
int
main()
{
std::cout << date::format("%d.%m.%Y %H:%M\n", to_chrono_time_point(41274.043));
}
这只是将 double
转换为具有 double
表示和 days
句点的 chrono::duration
,然后将 duration
舍入为system_clock::duration
,最后将该持续时间添加到 1.1.1900 00:00。结果是 std::chrono::system_clock::time_point
.
std::chrono::system_clock::time_point
可以使用来自相同库的 date::format
进行格式化,如图所示。这个程序的输出是:
02.01.2013 01:01