【问题标题】:Set sys_seconds to the epoch i.e. zero将 sys_seconds 设置为纪元,即零
【发布时间】:2020-12-16 03:52:48
【问题描述】:

我正在努力寻找将 sys_seconds 重置为零的好方法

date::sys_seconds st;
//st = date::sys_seconds(0);            //no matching conversion for functional-style cast from 'int' to 'date::sys_seconds'
//st = date::sys_seconds{date::sys_seconds(0)}; //no matching conversion for functional-style cast from 'int' to 'date::sys_seconds'
//st = std::chrono::system_clock::from_time_t(0);   //no viable overloaded '='
//st = date::sys_seconds(std::chrono::system_clock::from_time_t(0));    //no matching conversion for functional-style cast 
st = std::chrono::time_point_cast<std::chrono::seconds>(std::chrono::system_clock::from_time_t(0)); //works, but verbose

有没有更好的办法?

【问题讨论】:

  • 为什么要这样做?您的第一次失败可能表明您对real problem 的处理方式有误。
  • 我从调用例程中获得了一个 sys_seconds& 参数,并从数据库表中获得了一个结构数组,其中包含一个保存 time_t 值的字段。该例程需要将 sys_seconds& 参数更改为数据库表中的最大 time_t 值,因此我想将 sys_seconds& 参数初始化为零。
  • 啊,所以你对“零”不感兴趣,而是对“最小可能值(恰好为零)”感兴趣?这就说得通了。至少还有一种其他方法可以解决您的实际问题,但它可能会导致同样的问题,具体取决于如果数据库表为空会发生什么。

标签: c++ date chrono


【解决方案1】:
st = {};

说明:sys_seconds 的默认构造函数将事物设置为零。所以这只是默认构造一个sys_seconds 并将其分配给st。其他方法包括:

st = date::sys_seconds{};

和:

using namespace std::chrono_literals;
st = date::sys_seconds{0s};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-13
    • 2013-07-02
    • 2013-07-19
    • 2014-01-22
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-27
    相关资源
    最近更新 更多