簡體   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