开发工具【免费下载链接】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),仅供参考
企业数字化 ERP 产品动态
相关推荐
Puppet V3 Facts HTTP API 详解:节点事实上报、Schema 约束与间接层实现原理 运维DevOpsIaC 【免费下载链接】puppet Server automation framework and application 项目地址: https://gitcode.com/gh_mirrors/pu/puppet 点击查看 免费下载 导读
facts 端点是 Puppet V3 HTTP API 中用于**按节点名写入(保存)事实&… · 2026/9/27 9:14:25
NodeMCU WS2801 驱动模块完全指南:从接线到源码级原理 物联网嵌入式 【免费下载链接】nodemcu-firmware Lua based interactive firmware for ESP8266, ESP8285 and ESP32 项目地址: https://gitcode.com/gh_mirrors/no/nodemcu-firmware 点击查看 免费下载 本文基于 docs/modules/ws2801.md 整理,并结合 ap… · 2026/9/27 9:14:25
美工是做什么的新手入门 别被割韭菜,美工工作本质速查手册 找建站公司怕被坑高价?别急,这份速查手册直接拆解真相。 很多老板觉得美工就是“画图的”,其实这是最大的误区。 不懂美工的技术边界,你就只能被动接受“一口价”。 威胁场景:当“美工”变成安全漏洞的入口… · 2026/9/27 9:58:43
wp-calypso 数据表格组件 Table 详解:语义化 HTML、无障碍支持与 compact 紧凑模式实践 前端CMS 【免费下载链接】wp-calypso The JavaScript and API powered WordPress.com 项目地址: https://gitcode.com/gh_mirrors/wp/wp-calypso 点击查看 免费下载 Table 是 wp-calypso 中用于展示表格型数据的 React 组件族,由 Table、TableRow、Tabl… · 2026/9/27 9:58:19
用 PHP SDK 调用 Claude Message Batches API:异步批量处理与结果收集实战指南 人工智能大模型AI 应用移动开发交互助手 【免费下载链接】rikkahub RikkaHub is an Android APP that supports for multiple LLM providers. 项目地址: https://gitcode.com/gh_mirrors/ri/rikkahub 点击查看 免费下载 导读
本文以 .agents/skills/claude-api/ph… · 2026/9/27 9:58:19
Rustls 测试证书体系(test-ca)完全指南:目录结构、证书属性与重新生成方法 网络安全密码学网络 【免费下载链接】rustls A modern TLS library in Rust 项目地址: https://gitcode.com/gh_mirrors/ru/rustls 点击查看 免费下载 test-ca/ 是 Rustls 仓库中专用的测试证书签发中心,为集成测试预生成了一整套自签名根 CA、二级中间… · 2026/9/27 9:58:13
网站开发要什么专业?3个核心技能避开性能优化坑 网站开发要什么专业?3个核心技能避开性能优化坑 域名解析失败、服务器响应慢如蜗牛,这是不少初学者接手项目后的第一反应。很多人以为搞懂代码就行,却忽略了底层架构对 性能优化 的决定性影响。其实, 网站开发要什么专业… · 2026/9/27 9:58:07
网络推广方式有哪些推广思路怎么选避开网站被黑挂马坑 网络推广方式有哪些推广思路怎么选避开网站被黑挂马坑 网站被黑挂马不知道怎么办?这是很多站长半夜惊醒时的第一反应。屏幕一闪,弹窗满屏,SEO权重瞬间归零,这种崩溃感我见过太多次。很多新手一慌就乱删文件,结果把数据库搞丢,彻底死机。这时候最关键… · 2026/9/27 9:58:00
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01