新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer 流式日期 API 深度解析:以 In.Six 类为核心掌握相对日期计算

发布时间:2026/9/29 8:15:43来源:尧图网络
Humanizer 流式日期 API 深度解析:以 In.Six 类为核心掌握相对日期计算
开发工具【免费下载链接】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 是面向 .NET 的字符串、枚举、日期时间等类型的人性化处理库其 FluentDate 命名空间提供了一组「读起来像英语句子」的日期 API。本篇以 API 参考文档中的In.Six类为解剖样本完整讲解它的 7 个静态属性、7 个实例计算方法、UTC 基准语义、以及如何用XxxFrom(date)完成任意基准日期的相对偏移计算并顺带说明 T4 模板如何批量生成 One~Ten 系列类。In.Six 是什么FluentDate 家族中的「相对偏移」入口In.Six是定义在 src/Humanizer/FluentDate/In.SomeTimeFrom.cs 中的静态嵌套类隶属于public partial class Insrc/Humanizer/FluentDate/In.cs。它的定位与In主类提供In.January、In.TheYear(2026)这类「绝对日期」属性不同专司以当前时刻或指定日期为基准的相对时间偏移。从继承关系看In.Six直接继承System.Object是一个不持有任何状态、全部成员为static的门面类facade classpublic static class In.Six其完整 API 面分为两类属性7 个Seconds、Minutes、Hours、Days、Weeks、Months、Years表示「从现在起 6 个单位之后」全部返回System.DateTime方法7 个SecondsFrom(DateTime date)、MinutesFrom(...)、HoursFrom(...)、DaysFrom(...)、WeeksFrom(...)、MonthsFrom(...)、YearsFrom(...)表示「从传入日期起 6 个单位之后」同样返回System.DateTime。属性逐个拆解从现在起 6 个单位之后API 参考文档为每个属性给出了明确语义下面逐一给出签名与实测语义实现见 In.SomeTimeFrom.cs属性参考文档语义实际实现说明Seconds6 seconds from nowDateTime.UtcNow.AddSeconds(6)基准为UTC 当前时刻Minutes6 minutes from nowDateTime.UtcNow.AddMinutes(6)—Hours6 hours from nowDateTime.UtcNow.AddHours(6)—Days6 days from nowDateTime.UtcNow.AddDays(6)—Weeks6 weeks from nowDateTime.UtcNow.AddDays(42)周按 7 天换算即6 * 7Months6 months from nowDateTime.UtcNow.AddMonths(6)遵循 .NET 日历规则跨月边界自动进位Years6 years from nowDateTime.UtcNow.AddYears(6)会正确处理闰年如 2 月 29 日加 1 年落到 2 月 28 日所有属性的返回值类型均为System.DateTime且DateTime.Kind为Utc这是理解其语义的关键——它们不依赖调用线程的本地时区具有可移植性与可测试性。典型用法using Humanizer; // 从现在起 6 天、6 个月、6 年后UTC DateTime inSixDays In.Six.Days; DateTime inSixMonths In.Six.Months; DateTime inSixYears In.Six.Years;方法逐个拆解从任意基准日期起 6 个单位之后当需要以「某个确定的日期」而非「当前时刻」为基准时使用同名XxxFrom(DateTime date)系列方法DateTime deadline new(2026, 3, 1, 9, 0, 0, DateTimeKind.Utc); DateTime inSixHours In.Six.HoursFrom(deadline); // 2026-03-01 15:00:00 UTC DateTime inSixDays In.Six.DaysFrom(deadline); // 2026-03-07 09:00:00 UTC DateTime inSixWeeks In.Six.WeeksFrom(deadline); // 2026-04-12 09:00:00 UTC DateTime inSixMonths In.Six.MonthsFrom(deadline); // 2026-09-01 09:00:00 UTC DateTime inSixYears In.Six.YearsFrom(deadline); // 2032-03-01 09:00:00 UTC实现上每个方法都是在传入的date上调用对应的Add*扩展public static DateTime DaysFrom(DateTime date) date.AddDays(6); public static DateTime WeeksFrom(DateTime date) date.AddDays(42); // 6 周 42 天 public static DateTime MonthsFrom(DateTime date) date.AddMonths(6); public static DateTime YearsFrom(DateTime date) date.AddYears(6);需要注意AddMonths/AddYears由 .NET 的System.DateTime实现跨月末日期时会向下取整例如 8 月 31 日加 6 个月得到次年 2 月 28 日因此「6 个月后」的结果取决于基准日期的具体日期而不是简单地取同一日号。单元测试如何验证这些行为仓库中的测试文件 tests/Humanizer.Tests/FluentDate/InTests.cs 对该系列 API 给出了可复现的断言模式。例如InFiveDays测试[Fact] public void InFiveDays() { var baseDate On.January.The21st; var date In.Five.DaysFrom(baseDate); Assert.Equal(baseDate.AddDays(5), date); }这里用到了 FluentDate 的另一个入口On.January.The21st构造基准日期再验证In.Five.DaysFrom等价于baseDate.AddDays(5)——即In.Six.DaysFrom的行为可完全类比推广偏移量由成员类名决定偏移单位由成员名决定。生成测试文件 GeneratedFluentDateTests.cs 中还维护了[Six] 6这样的数字-单词映射表用于批量校验 One~Ten 各成员类。系列成员如何生成T4 模板与源码结构In.Six不是手写的孤例而是与In.One~In.Ten一同由 T4 模板批量生成的。模板文件为 src/Humanizer/FluentDate/In.SomeTimeFrom.tt其核心是一个for (var i 1; i 10; i)循环#for (var i 1; i 10; i){ var plural i 1 ? s : ; var second Second plural; // ... minute / hour / day / week / month / year 同理 # public static class # i.ToWords().Dehumanize() # { public static DateTime # second # DateTime.UtcNow.AddSeconds(# i #); public static DateTime # second #From(DateTime date) date.AddSeconds(# i #); // ... 其余 6 个单位同理 } #}#模板揭示了两个内部设计事实成员类名由i.ToWords().Dehumanize()决定即先把数字 1~10 转成英文单词one、two……再由 Humanizer 的Dehumanize转成 PascalCase 类型名One、Two……Six。因此In.Six恰好对应i 6的迭代。全部成员类共享同一套 7 属性 7 方法的对称结构Seconds~Years属性基于DateTime.UtcNowXxxFrom方法基于传入的date唯一差异只是数字 6 与 426 * 7。生成产物 src/Humanizer/FluentDate/In.SomeTimeFrom.cs 共 897 行Six类位于第 454~539 行。对每个属性/方法而言其语义都可以由模板中对应的Add*调用唯一确定这也解释了 API 参考文档中「6 X from now」与「6 X from the provided date」两组文案的整齐来源。配套的 DateOnly 版本InDate.Six仓库还提供了面向 .NET 6 的DateOnly版本——src/Humanizer/FluentDate/InDate.SomeTimeFrom.cs 中的InDate.Six其成员语义与In.Six一一对应但类型为System.DateOnly且没有Seconds/Minutes/Hours三个亚日精度单位因为DateOnly不含时间分量成员签名实现要点DaysDateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddDays(6))WeeksDateOnly内部仍是AddDays(42)MonthsDateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddMonths(6))YearsDateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddYears(6))XxxFrom方法同时重载了DateOnly与DateTime两种入参后者通过DateOnly.FromDateTime(...)截断时间分量。该类同样由 src/Humanizer/FluentDate/InDate.SomeTimeFrom.tt 模板生成且整段代码被#if NET6_0_OR_GREATER条件编译包裹即只对支持DateOnly的目标框架生效。实战组合把 In.Six 嵌入真实业务场景In.Six的典型价值在于消除魔法数、让时间语义自文档化。以下场景可直接套用1. 令牌过期时间验证码、重置链接通常需要从现在起 6 分钟内有效DateTime expiresAt In.Six.Minutes; // UTC 语义便于存库与跨服务器比较2. 基于指定基线的排期计算例如在某个活动开始日之后第 6 天自动生成提醒DateTime campaignStart new(2026, 5, 1); DateTime reminderAt In.Six.DaysFrom(campaignStart);3. 与 DateHumanize 组合展示得到偏移日期后可用DateHumanizeExtensions如Humanize()将差值渲染成6 days from now这类可读文本形成计算偏移 人性化展示的完整闭环参见 src/Humanizer/DateHumanizeExtensions.cs。4. 测试友好性由于属性基准固定为DateTime.UtcNow测试中如需确定性结果优先使用XxxFrom(baseDate)形态并显式传入基线正如 InTests.cs 中InFiveDays的做法。小结关注点结论类定位In.Six是In的静态嵌套类表示 6 个时间单位后的相对日期属性Seconds~Years共 7 个基准为DateTime.UtcNow返回DateTime方法XxxFrom(DateTime)共 7 个以传入日期为基准周的处理Weeks/WeeksFrom内部按AddDays(42)即 7 天/周换算月/年的处理委托 .NETAddMonths/AddYears跨月末自动向下取整生成方式One~Ten 全部由 In.SomeTimeFrom.tt T4 模板循环生成DateOnly 变体InDate.Six 提供DateOnly版本无亚日单位测试证据InTests.cs 与 GeneratedFluentDateTests.cs至此读者应能① 熟练使用In.Six的 7 属性 7 方法完成相对日期计算② 理解其 UTC 基准与DateOnly变体的差异③ 掌握 T4 模板批量生成 One~Ten 系列类的底层机制进而轻松迁移到In.Five、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 详解InDate.Two 相对日期计算与源码实现Humanizer 流式日期 API 详解InDate.Two 相对日期计算与源码实现 InDate.Two 是 Humanizer 流式日期FluentD开发工具Humanizer FluentDate 流式日期 API 实战以 InDate.Seven 为例掌握基于 DateOnly 的日期偏移计算Humanizer FluentDate 流式日期 API 实战以 InDate.Seven 为例掌握基于 DateOnly 的日期偏移计算 本篇技术指南围绕开发工具Humanizer 流畅日期 API 深度解析In.Four 相对日期计算的完整使用指南Humanizer 流畅日期 API 深度解析In.Four 相对日期计算的完整使用指南 导读 Humanizer 的 In 类提供了一组面向自然语言思维设计开发工具上一篇Wasp Actions 实战指南用声明式代码实现全栈数据变更下一篇微信聊天记录导出到电脑免费简单十分钟用留痕WeChatMsg存档创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

Django 中使用 filter 过滤不等于条件 2026/9/29 9:16:14

Django 中使用 filter 过滤不等于条件

在 Django 的 API 过滤 (django_filters) 中,需要实现 category 字段不等于 6 的过滤规则。由于 django_filters 主要用于包含特定条件的数据,而不直接支持 exclude 操作,因此需要采用自定义方法来实现该过滤条件。 解决方案 在 AoYuStudentF…

阅读更多 →
深度学习优化器实战:从梯度下降到AdamW/LAMB的训练选型与调参 2026/9/29 9:16:13

深度学习优化器实战:从梯度下降到AdamW/LAMB的训练选型与调参

1. 为什么我把优化器当成训练成败的胜负手先说个结论:同一份模型结构、同一份数据,优化器从Adam换成SGD再换成LAMB,训练曲线可能天差地别。这不是玄学,是优化器本质上决定了模型参数沿着哪个方向、以多大步长、怎么调节地走向收敛…

阅读更多 →
NLP自然语言处理分词模块LTP 2026/9/29 9:16:07

NLP自然语言处理分词模块LTP

LTP (Language Technology Platform) 是一款功能强大的中文自然语言处理工具,它为研究者和开发者提供了分词、词性标注、命名实体识别、依存句法分析等多种模块。无论是在科研领域还是工业应用中,LTP 都能为用户提供高效的中文文本处理支持。 本文旨在帮助读者快速入门 LTP,…

阅读更多 →
持久化Web AI编码工作区搭建指南:Claude Code与Codex实战 2026/9/29 9:16:07

持久化Web AI编码工作区搭建指南:Claude Code与Codex实战

做了一阵子 vibe coding,我最大的体会是:Claude Code 和 Codex 这代 CLI Agent 是真的能干活,但干活的环境还停留在“本地开个终端”的原始阶段。这个矛盾在我连续半个月两头跑、经常换设备之后彻底爆发——电脑合上,上下文断了&a…

阅读更多 →
NLP自然语言处理分词模块StanfordNLP 2026/9/29 9:16:07

NLP自然语言处理分词模块StanfordNLP

自然语言处理(NLP)是人工智能领域中的重要分支,旨在让计算机能够理解和生成人类语言。其应用涵盖了语言识别、机器翻译、情感分析等多个领域。分词作为自然语言处理的基础步骤之一,通过将文本切分为独立的词语或短语,为进一步的分析和处理奠定了坚实的基础。在这一背景下,…

阅读更多 →
Cursor 白嫖方法交流:用 TaoToken 统一 Key 配置 Cursor 的 settings.json 骨架 2026/9/29 9:16:07

Cursor 白嫖方法交流:用 TaoToken 统一 Key 配置 Cursor 的 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

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

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