gpt4 book ai didi

c++ - 从小时、分钟、秒等组合 chrono::time_point 的最优雅方式

转载 作者:可可西里 更新时间:2023-11-01 16:09:54 29 4
gpt4 key购买 nike

我有一个“人类可读”变量 hours , minutes , seconds , day , month , year包含与其名称相对应的值(假设我有来自 SYSTEMTIME<windows.h> 结构)。
我发现创建 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 中损失了一毫秒.
其次,(嗯......)我不喜欢这种转换))

你能提供一个更优雅的方法来解决这个问题吗?

最佳答案

使用 this open source, header-only library ,我可以:

#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

关于c++ - 从小时、分钟、秒等组合 chrono::time_point 的最优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31284994/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com