Humanizer FluentDate `In.Five` 完全指南:用流畅 API 计算 5 个时间单位后的 DateTime

发布时间:2026/9/28 3:26:26
Humanizer FluentDate `In.Five` 完全指南:用流畅 API 计算 5 个时间单位后的 DateTime 开发工具【免费下载链接】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 子系统中In.Five静态类展开它提供了从现在起 5 秒/分钟/小时/天/周/月/年后的DateTime属性以及从指定日期偏移 5 个时间单位的XxxFrom(DateTime)方法。读完本文你将掌握In.Five的全部 14 个公开成员及其底层实现原理并能在 .NET 日期计算中与其他 FluentDate APIIn、On、InDate组合使用。背景FluentDate 与In命名空间Humanizer 的 FluentDate 是一组以自然语言式方法调用代替晦涩的AddDays/AddMonths计算的日期 API。其中In类位于 src/Humanizer/FluentDate/In.cs负责表达未来的某个时刻In.TheYear(2027)返回 2027 年 1 月 1 日In.January、In.AprilOf(2025)等按月命名的方法见 src/Humanizer/FluentDate/In.Months.cs返回对应月份首日In.One到In.Ten十个嵌套静态类见 src/Humanizer/FluentDate/In.SomeTimeFrom.cs则表达从现在起 N 个时间单位之后或从某日期起偏移 N 个时间单位。In.Five正是这十个数量类中的一员对应偏移量 5是本文的主角其完整 API 由 website/versioned_docs/version-3.0.1/api/Humanizer.In.Five.md 收录。In.Five属性从现在起 5 个时间单位之后In.Five提供了 7 个只读静态属性全部返回System.DateTime语义均为5 个时间单位之后从现在这一刻起计算属性返回类型语义底层实现源码依据SecondsDateTime5 秒之后DateTime.UtcNow.AddSeconds(5)MinutesDateTime5 分钟之后DateTime.UtcNow.AddMinutes(5)HoursDateTime5 小时之后DateTime.UtcNow.AddHours(5)DaysDateTime5 天之后DateTime.UtcNow.AddDays(5)WeeksDateTime5 周之后DateTime.UtcNow.AddDays(35)MonthsDateTime5 个月之后DateTime.UtcNow.AddMonths(5)YearsDateTime5 年之后DateTime.UtcNow.AddYears(5)每个属性在 src/Humanizer/FluentDate/In.SomeTimeFrom.cs 中都有精确对应。典型用法using Humanizer; DateTime deadline In.Five.Minutes; // 当前 UTC 时间 5 分钟 DateTime refreshAt In.Five.Hours; // 当前 UTC 时间 5 小时需要注意这些属性基于DateTime.UtcNow计算得到的是UTC 时刻而非本地时间。若需要本地时区的语义应改用带参的XxxFrom(DateTime.Now)方法形式。In.Five方法从指定日期偏移 5 个时间单位除属性外In.Five还提供 7 个静态方法接收一个System.DateTime参数date返回偏移后的DateTime方法签名语义底层实现源码依据SecondsFrom(DateTime date)从date起 5 秒后date.AddSeconds(5)MinutesFrom(DateTime date)从date起 5 分钟后date.AddMinutes(5)HoursFrom(DateTime date)从date起 5 小时后date.AddHours(5)DaysFrom(DateTime date)从date起 5 天后date.AddDays(5)WeeksFrom(DateTime date)从date起 5 周后date.AddDays(35)MonthsFrom(DateTime date)从date起 5 个月后date.AddMonths(5)YearsFrom(DateTime date)从date起 5 年后date.AddYears(5)方法形式最大的价值是结果可预测、可测试因为基准时间由调用方传入不依赖系统时钟非常适合在业务逻辑中基于某个已知起点推算时间窗口。例如var startingPoint new DateTime(2025, 1, 20, 9, 0, 0); var fiveDaysLater In.Five.DaysFrom(startingPoint); // 2025-01-25 09:00 var fiveMonthsLater In.Five.MonthsFrom(startingPoint); // 2025-06-20 09:00官方示例工程 website/docs/_examples/scenarios-fluent-dates/Program.cs 中即以类似方式使用In.Two.MonthsFrom(startingPoint)推算两个月后其期望输出记录在同目录的 expected-output.txt 中。源码级原理T4 模板生成与UtcNow语义In.One到In.Ten十个类并非手写而是由 T4 模板 src/Humanizer/FluentDate/In.SomeTimeFrom.tt 批量生成的。模板核心逻辑如下#for (var i 1; i 10; i){ var plural i 1 ? s : ; ... public static class # i.ToWords().Dehumanize() # ... #即对 1 到 10 循环用i.ToWords()把数字转英文单词再Dehumanize()转回标识符风格得到类名One、Two、Five……属性名按i 1用单数Second、Minute……i 1用复数Seconds、Minutes……这与In.Five中全部使用复数形式Seconds、Days、Years的事实一致。由模板结构可以推断两个重要实现约定周Week不是AddWeeks而是AddDays(i * 7)。因此In.Five.Weeks等价于DateTime.UtcNow.AddDays(35)这与周的定义一致且不依赖 .NET 是否存在AddWeeksAPI。月、年的偏移使用日历运算AddMonths/AddYears遵循 .NET 标准行为月末日期会自动裁剪例如 1 月 31 日加 1 个月得到 2 月 28/29 日跨月、跨年完全由System.DateTime保证。实战与其他 FluentDate API 组合In.Five单独使用即可完成未来 5 个单位的计算组合使用则能写出几乎可读的日期表达式。例如测试 tests/Humanizer.Tests/FluentDate/InTests.cs 展示了On与In.Five的衔接var baseDate On.January.The21st; var date In.Five.DaysFrom(baseDate); Assert.Equal(baseDate.AddDays(5), date);结合In.AprilOf(year)、At(hour, minute)等 API可以表达类似2025 年 4 月 2 日再往后 5 天这类需求var appointment In.AprilOf(2025).AddDays(2).At(14, 30); // 2025-04-02 14:30 var reminder In.Five.DaysFrom(appointment); // 2025-04-07 14:30InDate.Five面向DateOnly的 .NET 6 变体若目标框架为 .NET 6 及以上Humanizer 还提供InDate类族见 src/Humanizer/FluentDate/InDate.SomeTimeFrom.cs其中的InDate.Five返回DateOnly且XxxFrom同时提供DateOnly与DateTime两个重载DateOnly fiveDaysLater InDate.Five.DaysFrom(new DateOnly(2025, 1, 20)); // 2025-01-25 DateOnly fromDateTime InDate.Five.DaysFrom(new DateTime(2025, 1, 20)); // 2025-01-25从源码结构看InDate仅覆盖Day、Week、Month、Year四种单位不包含秒、分钟、小时因为DateOnly本质上只表达日期这也说明面向纯日期场景时无需时间粒度 API。测试验证In.Five的正确性保证仓库通过两层测试保证In.Five行为正确确定性测试InTests.InFiveDaystests/Humanizer.Tests/FluentDate/InTests.cs用固定基准日期验证In.Five.DaysFrom恰好等于baseDate.AddDays(5)与实现逐一对账。反射式全量测试GeneratedFluentDateTeststests/Humanizer.Tests/FluentDate/GeneratedFluentDateTests.cs通过反射遍历In下所有相对日期类型对属性先记录调用前后的DateTime.UtcNow再断言返回值落在[Add(before, amount, unit), Add(after, amount, unit)]区间内对XxxFrom方法则用固定日期2024-02-29 10:20:30断言精确偏移。这样即使 T4 模板重新生成代码任何属性/方法偏移量错误都会被自动捕获。注意事项与适用边界时区语义In.Five.Seconds等属性基于DateTime.UtcNow是 UTC 时刻。若业务上需要本地时间的 5 分钟后请改用In.Five.MinutesFrom(DateTime.Now)。取值范围In类族仅提供 110 的数量嵌套类。需要其他偏移量如 15 天、30 分钟时应退回到标准的date.AddDays(15)或date.AddMinutes(30)或自行组合多次调用。不可变性所有属性每次访问都会基于当前UtcNow重新计算因此连续两次读取In.Five.Seconds得到的是两个略有差异的时刻需要固定时刻时应先赋值给局部变量。版本差异InDateDateOnly变体仅在NET6_0_OR_GREATER条件下编译面向旧框架时只有In/On的DateTime版本可用。小结In.Five是 Humanizer FluentDate 中数量 × 单位二维 API 的一个切片7 个属性 7 个方法覆盖秒到年的全部时间单位由 T4 模板统一生成、由反射测试全量校验。理解它的实现UtcNow语义、AddDays(35)表示周、AddMonths/AddYears做日历运算你就掌握了In.One至In.Ten全部十类的共同规律也就能在业务代码中写出更接近自然语言的日期表达式。赞分享开发工具【免费下载链接】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 流式日期 API 全解析In.Five 类与从现在起 5 个时间单位的 DateTime 计算Humanizer 流式日期 API 全解析In.Five 类与从现在起 5 个时间单位的 DateTime 计算 本文以 Humanizer 2.10.开发工具Humanizer FluentDate API 解析In.Three——用一句3 个时间单位之后完成日期计算Humanizer FluentDate API 解析 In.Three ——用一句3 个时间单位之后完成日期计算 In.Three 是 Humanize开发工具Humanizer In.Nine API 详解在 FluentDate 流畅日期体系中表达「9 个时间单位之后」Humanizer In.Nine API 详解在 FluentDate 流畅日期体系中表达「9 个时间单位之后」 In.Nine 是 Humanizer 库开发工具上一篇炉石佣兵战记自动化脚本3步实现游戏挂机智能化下一篇5分钟掌握如何免费破解QQ音乐加密格式实现跨平台播放创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询