簡體   English   中英

C++ 20 chrono:如何比較 time_point 和 month_day?

[英]C++ 20 chrono: How to compare time_point with month_day?

是否有一種現代而優雅的方法來確定month_day變量中的月份日期是否與給定的time_point變量匹配?

例如,我想知道今天是不是聖誕節。 我有以下代碼:

#include <chrono>

bool IsTodayChristmas()
{
    using namespace std::chrono;

    constexpr month_day Christmas = {December / 25};
    auto Now = system_clock::now();

    // return Now == Christmas; // How to?
}

現代而優雅:我的意思是,如果可能的話,我寧願不使用舊的 C 類型(類似於std::time_tstd::tm )和字符串比較(類似於std::put_time )。

任何幫助,將不勝感激。

您可以通過std::chrono::sys_days chrono::sys_days 將system_clock::now()轉換為std::chrono::year_month_day類型。 在實踐中,這可能看起來像

#include <chrono>

bool IsTodayChristmas() {
    using namespace std::chrono;

    constexpr month_day Christmas = {December / 25};
    auto Now = year_month_day{floor<days>(system_clock::now())};

    // either
    return Now == Christmas / Now.year();
    // or
    return Now.month() / Now.day() == Christmas;
}

正如 Howard Hinnant 指出的那樣,這將決定 UTC 的聖誕節。 您更有可能在本地時區的聖誕節之后:為此,我們必須首先將Now轉換為我們的本地時區:(注意std::chrono::current_zone尚未由 libstdc++ 或 libc++ 提供,到目前為止據我所知。)

bool IsTodayChristmas() {
    using namespace std::chrono;

    constexpr month_day Christmas = {December / 25};
    auto Now_local = current_zone()->to_local(system_clock::now());
    auto Today = year_month_day{floor<days>(Now_local)};

    return Today == Christmas / Today.year();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM