![](/img/trans.png)
[英]Extract year/month/day etc. from std::chrono::time_point in C++
[英]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_t
和std::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.