date::year_month_day 转换为 date::sys_days 后为什么小时默认是8点
时间: 2024-10-27 21:03:19 浏览: 10
oracle中to_date详细用法示例(oracle日期格式转换)
5星 · 资源好评率100%
`std::chrono::date::year_month_day`是一个只包含日期部分的时间点,而`std::chrono::sys_days`则是包含了完整日期和时间的表示。当你将`year_month_day`转换为`sys_days`时,如果不指定时间部分,系统会按照其内部规则填充,默认值通常是本地时间的午夜,也就是前一天晚上8点(即UTC+0时区的20:00)。这是因为在ISO 8601标准中,`sys_days`类型的日期视为从公元纪年开始的第几天。
例如,在上述转换中:
```cpp
auto ymd = year_month_day{2023, 1, 1}; // 2023年1月1日
auto sys_days_from_ymd = sys_days(ymd);
```
这里的`sys_days_from_ymd`将会是2023年的第一天(即2022年12月31日午夜)再加上一天(即2023年1月1日),因此实际上是2023年1月1日的8点。
如果你想要指定特定的时间,可以在转换时直接添加,如`sys_days(ymd) + hours(16)`得到下午4点。
阅读全文