新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer InDate.Six 详解:用流式 API 计算 6 天/6 周/6 月/6 年后的日期

发布时间:2026/9/27 9:14:36来源:尧图网络
Humanizer InDate.Six 详解:用流式 API 计算 6 天/6 周/6 月/6 年后的日期
开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载本篇技术指南围绕 Humanizer 2.14.1 文档中的InDate.Six类展开讲解如何用一行静态属性或方法直接拿到“6 天后”“6 周后”“6 个月后”“6 年后”的DateOnly日期。读完本文你将掌握 Humanizer FluentDate 相对日期 API 的属性/方法语义、DateOnly与DateTime两种重载的取舍、其 T4 模板生成机制与测试验证方式并能在 .NET 6 项目中直接落地使用。InDate.Six 是什么FluentDate 相对日期体系中的一员Humanizer 的 FluentDate 模块把未来某个日期的表述压缩成了类名与成员名本身。它围绕四个根类型展开In返回DateTime的“未来相对时间/月份”APIOn基于DateTime的“某月某日”APIInDate返回DateOnly的“未来相对日期/月份”API即本文主角OnDate基于DateOnly的“某月某日”API。InDate是一个用partial拆分的类src/Humanizer/FluentDate/InDate.cs内部嵌入了One到Ten十个静态嵌套类分别对应数量 1 到 10。InDate.Six就是其中数量为 6 的那一个文档 website/versioned_docs/version-2.14.1/api/Humanizer.InDate.Six.md 显示它继承自System.Object是一个public static class全部成员均为public static无需实例化即可调用。注意整个InDate系列包括InDate.Six在源码中被#if NET6_0_OR_GREATER条件编译保护见 src/Humanizer/FluentDate/InDate.SomeTimeFrom.cs因为DateOnly是 .NET 6 引入的类型。低于 .NET 6 的目标框架中不存在这套 API。四个核心属性从“现在”起算的相对日期InDate.Six提供了 4 个静态属性语义都是“从现在起 N 个单位后的日期”返回值统一为System.DateOnly属性说明签名Days6 天后的日期public static System.DateOnly Days { get; }Weeks6 周后的日期public static System.DateOnly Weeks { get; }Months6 个月后的日期public static System.DateOnly Months { get; }Years6 年后的日期public static System.DateOnly Years { get; }对应源码位于 src/Humanizer/FluentDate/InDate.SomeTimeFrom.cs 的Six类中实现方式高度一致例如public static DateOnly Days DateOnly.FromDateTime(DateTime.UtcNow.AddDays(6)); public static DateOnly Weeks DateOnly.FromDateTime(DateTime.UtcNow.AddDays(42)); // 6 * 7 public static DateOnly Months DateOnly.FromDateTime(DateTime.UtcNow.AddMonths(6)); public static DateOnly Years DateOnly.FromDateTime(DateTime.UtcNow.AddYears(6));有三个容易被忽略的实现细节值得注意基准时间永远是 UTC属性基于DateTime.UtcNow而非DateTime.Now计算然后通过DateOnly.FromDateTime截掉时间部分只保留年月日。因此“6 天后”不会受本地时区设置影响测试可复现性更好。周是天的整数倍Weeks没有独立的周类型概念直接等价于AddDays(42)6 周 × 7 天。月/年遵循 .NET 日历算法AddMonths(6)、AddYears(6)由DateOnly自身处理大小月与闰年例如 8 月 31 日加 6 个月会得到次年 2 月的月末28/29 日而不是抛异常。八个 From 方法从指定日期起算如果不想基于“现在”而是基于某个确定的基准日期InDate.Six还提供了 4 组共 8 个静态方法每个单位都有DateOnly与DateTime两种参数重载方法参数类型返回类型DaysFrom(DateOnly date)DateOnlyDateOnlyDaysFrom(DateTime date)DateTimeDateOnlyWeeksFrom(DateOnly date)DateOnlyDateOnlyWeeksFrom(DateTime date)DateTimeDateOnlyMonthsFrom(DateOnly date)DateOnlyDateOnlyMonthsFrom(DateTime date)DateTimeDateOnlyYearsFrom(DateOnly date)DateOnlyDateOnlyYearsFrom(DateTime date)DateTimeDateOnly源码实现同样直观src/Humanizer/FluentDate/InDate.SomeTimeFrom.cspublic static DateOnly DaysFrom(DateOnly date) date.AddDays(6); public static DateOnly DaysFrom(DateTime date) DateOnly.FromDateTime(date.AddDays(6)); public static DateOnly MonthsFrom(DateOnly date) date.AddMonths(6); public static DateOnly MonthsFrom(DateTime date) DateOnly.FromDateTime(date.AddMonths(6));两组重载的差别在于DateOnly版本直接在纯日期上做加法天然无时间分量DateTime版本则保留输入的时间部分参与运算例如从某天 14:30 起算 6 天最终仍通过DateOnly.FromDateTime统一收敛为纯日期返回。无论入参类型如何所有 From 方法的返回值都固定是DateOnly。源码视角T4 模板生成十个兄弟类InDate.Six不是手写代码而是由 T4 文本模板批量生成的。模板位于 src/Humanizer/FluentDate/InDate.SomeTimeFrom.tt核心逻辑是一个循环#for (var i 1; i 10; i){ var plural i 1 ? s : ; // 单复数处理 var day Day plural; // Day / Days var week Week plural; // Week / Weeks var month Month plural; // Month / Months var year Year plural; // Year / Years # public static class # i.ToWords().Dehumanize() #从中可以确认三个设计约定类名由i.ToWords().Dehumanize()生成数字先转英文单词6→six再反人类化处理six→Six因此得到One、Two……Ten属性名按数量自动单复数数量 1 时是单数Day/Week/Month/Year见InDate.One数量 210 时是复数Days/Weeks/Months/Years与文档中InDate.Six.Days等成员一一对应生成器把#if NET6_0_OR_GREATER条件编译直接写进模板输出因此全部生成代码只对 .NET 6 生效。这也解释了为什么文档目录下会同时存在Humanizer.InDate.One.md到Humanizer.InDate.Ten.md十个几乎同构的 API 页面它们描述的是同一模板产出的十组平行类本文讨论的InDate.Six只是数量为 6 的那一组。测试如何保证这些 API 的正确性仓库对 FluentDate 生成 API 的验证方式是反射遍历测试不针对单个成员写死断言而是枚举所有嵌套类与成员再按类名反推数量、按成员名反推单位统一断言。相关测试在 tests/Humanizer.Tests/FluentDate/GeneratedFluentDateTests.csInDateRelativeDatePropertiesReturnExpectedUtcOffsets对InDate所有相对日期属性含Six.Days/Weeks/Months/Years取值断言结果落在DateTime.UtcNow加对应数量之后的时间区间内测试第 L34-L35、L99-L115InDateRelativeDateOnlyMethodsReturnExpectedOffsetsFromProvidedDate用固定的基准日期2024-02-29闰日专门检验月/年加法边界调用所有DateOnly参数的重载逐项断言Assert.Equal测试第 L38-L39、L117-L138InDateRelativeDateTimeMethodsReturnExpectedOffsetsFromProvidedDateTime同样的逻辑覆盖所有DateTime参数重载。除此之外tests/Humanizer.Tests/FluentDate/InDateTests.cs 给出了一个非常贴近实际用法的示例用OnDate.January.The21st构造基准日再交给InDate.Five.DaysFrom(baseDate)断言结果等于baseDate.AddDays(5)。把Five换成Six即可得到“6 天后”的等效验证二者行为完全对称。在项目中的完整使用示例引入 Humanizer 命名空间后InDate.Six的用法非常直观using Humanizer; // 属性从现在起算 DateOnly inSixDays InDate.Six.Days; // 今天 6 天 DateOnly inSixWeeks InDate.Six.Weeks; // 今天 42 天 DateOnly inSixMonths InDate.Six.Months; // 今天 6 个月 DateOnly inSixYears InDate.Six.Years; // 今天 6 年 // 方法从指定基准日起算DateOnly 重载 DateOnly baseDate new(2026, 9, 26); DateOnly dueDate InDate.Six.MonthsFrom(baseDate); // 2027-03-26 // 方法从 DateTime 起算结果仍是 DateOnly DateOnly auditDate InDate.Six.YearsFrom(DateTime.UtcNow);典型应用场景包括订阅/会员“6 个月后续期提醒日”计算、合同“6 年后到期日”排期、报表“6 周滚动窗口”起点计算等。由于所有成员都是静态且无副作用可以直接嵌入业务表达式而不需要任何额外配置。与周边 API 的组合使用InDate.Six属于相对日期相对“现在”或相对给定基准日与InDate家族的绝对日期 API 互补InDate的月份属性/方法返回“当前年第 X 月 1 日”或“指定年份的第 X 月 1 日”例如InDate.January、InDate.JuneOf(2030)详见 website/versioned_docs/version-2.14.1/api/Humanizer.InDate.mdInDate.TheYear(int year)返回指定年份的 1 月 1 日实现于 src/Humanizer/FluentDate/InDate.cs兄弟类InDate.One到InDate.Ten提供数量 110 的同一套相对日期 API其中InDate.One使用单数成员名Day、Week、Month、Year需要DateTime形态时可改用In家族的相对时间 API需要“某月某日”时使用OnDate如测试中出现的OnDate.January.The21st。使用注意事项小结目标框架InDate.Six全部成员仅存在于 .NET 6 及更高版本NET6_0_OR_GREATER条件编译旧框架下不可用属性基于 UTCDays/Weeks/Months/Years以DateTime.UtcNow为基准跨时区部署时结果一致若业务要求本地日界线语义请自行基于本地时间计算返回值恒为 DateOnly即使传入DateTime重载结果也会截断时间分量周的天数换算Weeks固定按 7 天/周换算6 周 42 天不涉及“周起始日”概念月/年边界加月/加年的月末归整由 .NETDateOnly实现保证闰年场景如 2024-02-29 加 6 年行为与AddYears一致可直接依赖测试 tests/Humanizer.Tests/FluentDate/GeneratedFluentDateTests.cs 作为行为基准。如果只需要“6 天/周/月/年后”这类常见期限InDate.Six是比手写DateTime.UtcNow.AddX()更富表达力的选择成员名即文档返回类型即约束无需注释即可自解释。赞分享开发工具【免费下载链接】HumanizerHumanizer meets all your .NET needs for manipulating and displaying strings, enums, dates, times, timespans, numbers and quantities项目地址https://gitcode.com/gh_mirrors/hu/Humanizer点击查看免费下载相关推荐Humanizer FluentDate 指南使用 InDate.Six 编写 6 天/周/月/年后日期计算Humanizer FluentDate 指南使用 InDate.Six 编写 6 天/周/月/年后日期计算 本篇技术指南围绕 Humanizer 的 InD开发工具Humanizer InDate.Ten 详解用 DateOnly 流式 API 计算 10 天/周/月/年后的日期Humanizer InDate.Ten 详解用 DateOnly 流式 API 计算 10 天/周/月/年后的日期 InDate.Ten 是 Humaniz开发工具Humanizer InDate.Nine 详解用流式日期 API 计算 9 天/周/月/年后的 DateOnlyHumanizer InDate.Nine 详解用流式日期 API 计算 9 天/周/月/年后的 DateOnly Humanizer 的 FluentDat开发工具上一篇如何在Windows上轻松安装draw.io桌面版终极离线绘图解决方案下一篇Font Awesome 7终极指南互联网图标库的完整使用手册创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

open-pencil SDK 进阶:useLayerDrag 实现图层树拖拽重排与跨容器移动的完整指南 2026/9/27 10:12:24

open-pencil SDK 进阶:useLayerDrag 实现图层树拖拽重排与跨容器移动的完整指南

前端桌面应用AI 应用MCP 服务 【免费下载链接】open-pencil AI-native design editor. Open-source Figma alternative. 项目地址: https://gitcode.com/gh_mirrors/op/open-pencil 点击查看 免费下载 useLayerDrag 是 open-pencil Vue SDK 中负责图层树&#xff0…

阅读更多 →
F2 Magnifier 放大镜组件完全指南:局部聚焦、参考线与多系列数据对比实战 2026/9/27 10:12:24

F2 Magnifier 放大镜组件完全指南:局部聚焦、参考线与多系列数据对比实战

数据可视化前端 【免费下载链接】F2 📱📈An elegant, interactive and flexible charting library for mobile. 项目地址: https://gitcode.com/gh_mirrors/f2/F2 点击查看 免费下载 Magnifier 是 F2 图表库内置的局部放大组件,它…

阅读更多 →
出口电商平台怎么选?3个维度避开域名服务器坑 2026/9/27 10:12:17

出口电商平台怎么选?3个维度避开域名服务器坑

出口电商平台怎么选?3个维度避开域名服务器坑 域名服务器搞不懂,选出口电商平台时最容易踩坑。很多新手觉得买个服务器就行,结果备案卡住,或者服务器性能撑不住海外访问,最后网站打开像蜗牛。别慌,今天把怎么选出口电商平台这件事拆透。…

阅读更多 →
怎么搭建自己的网页:5个避坑注意事项 2026/9/27 10:12:10

怎么搭建自己的网页:5个避坑注意事项

怎么搭建自己的网页:5个避坑注意事项 网站做好了没人访问,是不是因为你连域名和服务器都没配好? 很多老板觉得只要页面漂亮就行,结果上线后打开速度慢得像蜗牛,甚至直接打不开。 这时候再谈SEO优化就是扯淡,地基没打好,楼盖得再高也是危房。…

阅读更多 →
GenOffice Sheets 数据来源标注指南(data-attribution):用超链接 + 单元格 + 格式化实现可追溯的外部数据填充 2026/9/27 10:11:55

GenOffice Sheets 数据来源标注指南(data-attribution):用超链接 + 单元格 + 格式化实现可追溯的外部数据填充

人工智能AI 应用桌面应用AI AgentMCP 服务AI 技能 【免费下载链接】genoffice Free, open-source AI Office suite: Docs, Sheets, Slides, PDF, Markdown and HTML editors with a built-in AI agent, plus a genoffice CLI and agent skill so Claude Code, Codex and Cursor…

阅读更多 →
视觉网站建设哪家好?3步搞定被黑挂马的救命方案 2026/9/27 10:11:26

视觉网站建设哪家好?3步搞定被黑挂马的救命方案

视觉网站建设哪家好?3步搞定被黑挂马的救命方案 网站突然打开变成赌博页面,后台登录不进去,客户投诉链接带毒。这种时候,别急着重启服务器,先深呼吸。 我见过太多做视觉设计的老板,因为不懂技术,网站被黑后只能干瞪眼。其实,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉