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

date.h库date::floor<days>返回类型及编译期校验日参数方法

使用HowardHinnant date库定义天级精度参数的函数

在date库中,专门对应天级精度的system_clock时间点的类型是date::sys_days,它本质是std::chrono::time_point<std::chrono::system_clock, date::days>,即以天为刻度的时间点类型。

你可以直接用这个类型定义函数,实现编译期验证参数是否为天级精度:

#include "date/date.h"

void startOnDay(date::sys_days day) {
    // 参数day已经是截断到当天起始时刻的时间点,无需再调用floor<days>
    // 示例:转换成年月日格式
    auto ymd = date::year_month_day{day};
}

为什么这能实现编译期验证?

当你调用date::floor<days>(system_clock::time_point)时,返回值的类型正是sys_days。如果尝试直接传入未截断的system_clock::time_point到startOnDay中,编译器会因为类型不匹配报错——因为system_clock::time_point和sys_days之间没有隐式转换,必须显式调用floor<days>或者用日期构造sys_days后传入。

调用示例

// 方式1:直接用年月日构造sys_days传入
startOnDay(date::year{2024}/4/15);

// 方式2:从完整时间点截断后传入
auto now = std::chrono::system_clock::now();
startOnDay(date::floor<days>(now));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 11:12:03