我只是想使用C++20 std::chrono打印当前工作日(本地时间)。
看起来很简单(一个,两个,三个)。
然而,这对我来说打印的是“Tue”(今天是星期一)。如果我将注释切换到手动定义的日期(本问题发布于2023年6月26日-0400),它会打印“Mon”。
编辑:我认为这是一个时区的问题,正如我的三个链接所示。不过,我无法使用std::chrono编译它。
看起来很简单(一个,两个,三个)。
#include <chrono>
#include <iostream>
int main() {
using namespace std::chrono;
system_clock::time_point now = system_clock::now();
// system_clock::time_point now = sys_days{June / 26d / 2023y} + 12h;
weekday wd{floor<days>(now)};
#ifdef _WIN32
std::cout << wd << "\n";
#else
std::cout << wd.c_encoding() << " (Sunday = " << Sunday.c_encoding() << ")\n";
#endif
return 0;
}
然而,这对我来说打印的是“Tue”(今天是星期一)。如果我将注释切换到手动定义的日期(本问题发布于2023年6月26日-0400),它会打印“Mon”。
- 如何正确地获取当前日期?
now()
日期为什么与sys_days
/year_month_day
不同?
编辑:我认为这是一个时区的问题,正如我的三个链接所示。不过,我无法使用std::chrono编译它。
#include <chrono>
#include <iostream>
int main() {
using namespace std::chrono;
auto now = std::chrono::system_clock::now();
auto now_local = zoned_time{current_zone(), now}.get_local_time();
sys_days now_local_in_days{floor<days>(now_local)}; // !!! no constructor available
weekday wd{now_local_in_days};
#ifdef _WIN32
std::cout << wd << "\n";
#else
std::cout << wd.c_encoding() << "\n";
#endif
return 0;
}
所以我猜我要添加:
- 如何将本地时间转换为工作日?
sys_days
构造函数接受local_time
作为参数。 - MHebessys_days
构造函数接受local_time
作为参数。 - MHebesnow_local_in_days
需要具有local_days
类型,而不是sys_days
。 - cpplearnernow_local_in_days
需要是local_days
类型,而不是sys_days
。 - cpplearnernow_local_in_days
需要是local_days
类型,而不是sys_days
类型。 - undefined