最优雅的方式组合chrono::time_point从小时,分钟,秒等
Most elegant way to combine chrono::time_point from hours, minutes, seconds etc
我有一个"人类可读的"变量hours
, minutes
, seconds
, day
, month
, year
,包含与其名称对应的值(假设我有<windows.h>
的SYSTEMTIME
结构)。
我发现创建chrono::time_point
的唯一方法是:
SYSTEMTIME sysTime = ...; // Came from some source (file, network, etc. )
tm t;
t.tm_sec = sysTime.wSecond;
t.tm_min = sysTime.wMinute;
t.tm_hour = sysTime.wHour;
t.tm_mday = sysTime.wDay;
t.tm_mon = sysTime.wMonth - 1;
t.tm_year = sysTime.wYear - 1900;
t.tm_isdst = 0;
std::chrono::system_clock::time_point dateTime =
std::chrono::system_clock::from_time_t( mktime( & t ) );
首先,我从SYSTEMTIME
丢失了一个毫秒。
第二,(嗯…)我不喜欢这种转换)
你能给我一个更优雅的方式来处理这个问题吗?
使用这个开源的头文件库,我可以:
#include "date.h"
#include <iostream>
struct SYSTEMTIME
{
int wMilliseconds;
int wSecond;
int wMinute;
int wHour;
int wDay;
int wMonth;
int wYear;
};
int
main()
{
SYSTEMTIME sysTime = {123, 38, 9, 10, 8, 7, 2015};
std::chrono::system_clock::time_point dateTime =
date::sys_days(date::year(sysTime.wYear)
/date::month(sysTime.wMonth)
/date::day(sysTime.wDay))
+ std::chrono::hours(sysTime.wHour)
+ std::chrono::minutes(sysTime.wMinute)
+ std::chrono::seconds(sysTime.wSecond)
+ std::chrono::milliseconds(sysTime.wMilliseconds);
std::cout << dateTime << 'n';
}
输出:2015-07-08 10:09:38.123000
在"date.h"中,您可能需要使用这些宏来使用VS进行编译:
# define CONSTDATA const
# define CONSTCD11
# define CONSTCD14
对于符合标准的c++ 14编译器,这些宏应该设置为:
# define CONSTDATA constexpr
# define CONSTCD11 constexpr
# define CONSTCD14 constexpr
相关文章:
- 为什么在读取文件大小时文件IO速度会发生变化
- 在容量内调整矢量大小时的性能影响
- 如何在新数组较小时创建新数组并将旧数组的最后一个元素复制到新数组中?
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- Qt5 部署"procedure entry point could not be located"
- 尝试使用 EvtSetChannelConfigProperty() 函数更新最大事件日志文件大小时插入的错误值
- 当我的阵列达到一定大小时,Qt 不起作用
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 如何遍历几个每小时一次的根(.root)文件,并将它们组合成更大的每日数据.root文件?
- 如何从内存中分配GDI+ POINT类地址?
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- 为什么在使用VK_PRESENT_MODE_FIFO_KHR呈现模式调整交换链图像大小时出现白色闪烁
- std::设置大小时,vector的性能较低
- 将秒转换为小时、分钟、秒.百分之一秒
- 获取大小时是否必须锁定 std::queue?
- 通过拖动边框调整大小时不显示SDL_WINDOWEVENT_SIZE_CHANGED?
- 如何在OpenCV中存储部分轮廓点喜欢新矢量中的左侧,该类型为<vector<vector<Point>>
- 时间转换为 24 小时格式 cpp
- 在每个向量<向量中查找最小/最大 x,y<Point>>
- 格式化的时间字符串在解析为time_point时会产生小时差异