繁体   English   中英

如何使用 std::chrono 库设置特定时间?

[英]How do I set a specific time using the std::chrono library?

而不是使用std::chrono::system_clock::now();

我想设置自己的特定小时\分钟\秒。 类似于 go 关于使用struct tm手动构造日期时间的方式。

这样做的最佳方法是什么?

我找到了我正在寻找的解决方案。 请参阅: Howard Hinnant 的解决方案

基本上你应该使用 24 小时的持续时间

using days = std::chrono::duration<int, std::ratio<86400>>;
auto last_midnight = std::chrono::time_point_cast<days>(std::chrono::system_clock::now());

然后将 24 小时时间戳添加到它:)

您可以使用 UDL(用户定义的文字)来创建持续时间。 持续时间可以通过std::chrono::time_point的构造函数转换为 timpoint。

#include <iostream>
#include <chrono>

int main()
{
  using namespace std::literals::chrono_literals;

  auto nanoseconds_i = 3ns;
  auto nanoseconds_f = 3.1ns;

  std::cout << nanoseconds_i.count() << std::endl;
  std::cout << nanoseconds_f.count() << std::endl;
}

<chrono>提供的任何时钟都是指一个纪元,这与您的输入增量所指的时间点不同(基于问题下方的评论)。 所以你不应该尝试使用std::chrono::time_point实例(实例化时钟处理),而是使用std:chrono::duration 后者与任何参考时间点无关,您的输入也是如此。 根据此输入的单位,选择预定义的std::duration实例之一,例如

#include <chrono>

const int timestamp = getSecondsSinceMidnight();

const std::chrono::seconds sec{timestamp};

现在您可以继续进行,例如减去另一个时间戳等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM