You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从年月日时分秒获取std::chrono::time_point<system_clock, seconds>

修复代码的方法

原代码主要存在几个问题:

  • 误用years/months/days这些时长类型构造日期,它们代表的是一段时间长度,而非具体的年月日数值;
  • 普通数值(hour/minute/second)无法直接和chrono时间点/时长相加,必须转换为对应的chrono时长类型;
  • 目标时间点tp的精度为秒级,传入的小数秒会被自动截断。

修复后的代码

#include <chrono>

int main() {
    int year = 2023;
    int month = 1;
    int day = 1;
    int hour = 1;
    int minute = 1;
    double second = 0.000005;

    // 1. 构造具体年月日,转换为系统时间的天数
    std::chrono::sys_days base_date = std::chrono::year_month_day{
        std::chrono::year{year}, 
        std::chrono::month{month}, 
        std::chrono::day{day}
    };

    // 2. 将时分秒转为chrono时长类型,叠加到基准日期
    auto total_duration = std::chrono::hours{hour} + 
                          std::chrono::minutes{minute} + 
                          std::chrono::seconds{static_cast<long long>(second)};

    // 3. 赋值给目标时间点
    std::chrono::time_point<std::chrono::system_clock, std::chrono::seconds> tp;
    tp = base_date + total_duration;

    return 0;
}

额外说明

  • 如果需要保留小数秒精度,需将tp的精度改为更高类型(比如std::chrono::microseconds或std::chrono::nanoseconds),同时把second转换为对应精度的时长(例如std::chrono::duration<double, std::micro>{second*1e6})。
  • year_month_day需要C++20及以上版本支持,若使用旧版本,可通过tm结构体转换构造日期。

内容的提问来源于stack exchange,提问作者Guo Jia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 09:01:03