c – 从时钟,分钟,秒等组合chrono :: time_point的最优雅的方式

我有一个“人类可读”变量的小时,分​​钟,秒,日,月,年,其中包含与其名称相对应的值(假设我有< 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失去了一个毫秒.
第二,(mmm …)我不喜欢这种转换))

你能给出一个更优雅的方式来做这个问题吗?

解决方法

使用 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+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...