开发工具【免费下载链接】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点击查看免费下载In.Nine是 Humanizer FluentDate 子模块为数字 9 生成的一组静态成员它把DateTime.UtcNow.AddXxx(9)这类底层调用封装成In.Nine.Days、In.Nine.MonthsFrom(date)这样可读性极强的表达式。本文以version-2.11.10的 API 文档为主体结合仓库中src/Humanizer/FluentDate/下的 T4 生成源码与tests/Humanizer.Tests/FluentDate/的测试用例完整介绍它的 7 个属性、7 个方法、底层实现原理与实战用法读完即可在自己项目中直接用上这套流式日期语法。In.Nine 是什么FluentDate 家族中的数字 9入口Humanizer 的 FluentDate 是一组让日期计算读起来像自然语言的 APIIn.Five.DaysFrom(someDate)表示从某个日期起 5 天后On.January.The21st表示1 月 21 日。其中In是顶层入口类In.Nine是它的嵌套静态类专门负责与数字9相关的所有相对日期计算涵盖秒、分钟、小时、天、周、月、年七种时间单位。从源码结构看In.Nine由 T4 文本模板 In.SomeTimeFrom.tt 统一生成模板对i 1..10循环用i.ToWords().Dehumanize()把数字转成英文单词Nine再按单复数规则拼出Seconds/Minutes/Hours/Days/Weeks/Months/Years成员名最终产出 In.SomeTimeFrom.cs 中的One到Ten十个嵌套类Nine正是其中之一见该文件第 721–806 行。这意味着In.Nine的 API 形态与In.One到In.Ten完全对称只要掌握了Nine其余数字类即可触类旁通。此外同一子模块中还提供了面向DateOnly的 InDate 系列在 .NET 6 及以上可用以及用于生成 T4 的 In.SomeTimeFrom.tt 与 In.Months.tt。属性Properties9 个时间单位从现在起In.Nine提供了 7 个只读静态属性语义全部是从现在起 9 个 X 之后底层均基于DateTime.UtcNow计算返回System.DateTime属性文档语义底层实现来自生成源码In.Nine.Seconds9 seconds from nowDateTime.UtcNow.AddSeconds(9)In.Nine.Minutes9 minutes from nowDateTime.UtcNow.AddMinutes(9)In.Nine.Hours9 hours from nowDateTime.UtcNow.AddHours(9)In.Nine.Days9 days from nowDateTime.UtcNow.AddDays(9)In.Nine.Weeks9 weeks from nowDateTime.UtcNow.AddDays(63)即 9 × 7In.Nine.Months9 months from nowDateTime.UtcNow.AddMonths(9)In.Nine.Years9 years from nowDateTime.UtcNow.AddYears(9)文档中对应的签名形如public static System.DateTime Seconds { get; } public static System.DateTime Minutes { get; } public static System.DateTime Hours { get; } public static System.DateTime Days { get; } public static System.DateTime Weeks { get; } public static System.DateTime Months { get; } public static System.DateTime Years { get; }从生成源码可见两个值得注意的实现事实基于 UTC 时刻属性值是读取那一刻的DateTime.UtcNow加偏移因此每次访问都会重新计算。若在代码中多次读取同一属性结果会随当前 UTC 时间推进而略有差异适合一次性取值使用。周以天为倍数Weeks不是调用AddDays(9)而是AddDays(63)即 9 周按 7 天/周换算符合测试中对RelativeDateUnit.Week的amount * 7断言见 GeneratedFluentDateTests.cs 第 265–276 行。方法Methods9 个时间单位从指定日期起与属性一一对应In.Nine还提供 7 个静态方法语义是从传入的 date 起 9 个 X 之后同样返回System.DateTime方法文档语义底层实现In.Nine.SecondsFrom(date)9 seconds from the provided datedate.AddSeconds(9)In.Nine.MinutesFrom(date)9 minutes from the provided datedate.AddMinutes(9)In.Nine.HoursFrom(date)9 hours from the provided datedate.AddHours(9)In.Nine.DaysFrom(date)9 days from the provided datedate.AddDays(9)In.Nine.WeeksFrom(date)9 weeks from the provided datedate.AddDays(63)In.Nine.MonthsFrom(date)9 months from the provided datedate.AddMonths(9)In.Nine.YearsFrom(date)9 years from the provided datedate.AddYears(9)文档中的完整签名如下所有方法的参数类型与返回类型均为System.DateTimepublic static System.DateTime SecondsFrom(System.DateTime date); public static System.DateTime MinutesFrom(System.DateTime date); public static System.DateTime HoursFrom(System.DateTime date); public static System.DateTime DaysFrom(System.DateTime date); public static System.DateTime WeeksFrom(System.DateTime date); public static System.DateTime MonthsFrom(System.DateTime date); public static System.DateTime YearsFrom(System.DateTime date);与属性相比方法版是确定性的给定同一个date无论何时调用、调用多少次结果始终一致因此更适合在需要可复现计算的业务逻辑中使用。实战用法与组合示例结合仓库提供的 FluentDate 示例 scenarios-fluent-dates/Program.cs可以看到这套 API 的典型组合方式——先用In.Two.MonthsFrom做相对偏移再用In.AprilOf(2025)与.At(14, 30)构造绝对日期using Humanizer; var startingPoint new DateTime(2025, 1, 20, 9, 0, 0); var twoMonthsLater In.Two.MonthsFrom(startingPoint); // 2025-03-20 09:00 var appointment In.AprilOf(2025).AddDays(2).At(14, 30); // 2025-04-02 14:30 Console.WriteLine($Two months later: {twoMonthsLater:yyyy-MM-dd HH:mm}); Console.WriteLine($Appointment: {appointment:yyyy-MM-dd HH:mm});把其中的数字换成Nine即可获得9 天后的日期9 个月后的时刻等表达式// 从现在起 9 天基于 UTC var dueDate In.Nine.Days; // 从指定日期起 9 个月 var deadline In.Nine.MonthsFrom(new DateTime(2025, 1, 20)); // 从指定日期起 9 年 var anniversary In.Nine.YearsFrom(new DateTime(2025, 1, 20));与手写date.AddDays(9)相比In.Nine.DaysFrom(date)的收益主要在可读性与可组合性表达式本身即文档且能与In类的月份属性如In.September、In.SeptemberOf(2025)自然混排。底层原理T4 模板如何生成 In.NineIn.Nine不是手写代码而是由 T4 模板驱动的生成代码这一点从仓库布局可以清楚看到模板文件 In.SomeTimeFrom.tt 内含for (var i 1; i 10; i)循环每次迭代生成一个以i.ToWords().Dehumanize()命名的嵌套类类内部为 7 个时间单位各生成一个属性基于DateTime.UtcNow和一个方法基于传入的date模板引用$(TargetPath)程序集并import namespaceHumanizer说明生成阶段直接复用了 Humanizer 自身的数字转单词能力生成结果即 In.SomeTimeFrom.cs其中Nine类的属性与方法实现与本文前面表格完全一致。这套模板生成 × 代码复用的机制保证了In.One到In.Ten的 API 高度一致任何数字类的行为模式都可互相印证。测试验证Nine 的偏移如何被断言仓库用反射式测试对包括In.Nine在内的全部生成 API 做了系统校验核心依据是 GeneratedFluentDateTests.csInRelativeDatePropertiesReturnExpectedUtcOffsets第 9–10 行遍历In下所有相对日期嵌套类型对每个静态属性在DateTime.UtcNow前后采样区间内断言Assert.InRange(actual, Add(before, amount, unit), Add(after, amount, unit))验证属性值确实落在当前时刻 9 个时间单位的窗口内InRelativeDateMethodsReturnExpectedOffsetsFromProvidedDate第 13–14 行以固定基准new DateTime(2024, 2, 29, 10, 20, 30, DateTimeKind.Utc)调用每个*From(date)方法并用Assert.Equal(Add(date, amount, unit), actual)精确断言偏移量辅助方法Add第 265–276 行按RelativeDateUnit枚举实现Second/Minute/Hour/Day/Week/Month/Year的加法其中Week date.AddDays(amount * 7)与In.Nine.Weeks的AddDays(63)实现完全对应。此外InTests.cs 中的InFiveDays用例第 104–109 行展示了In.Five.DaysFrom(baseDate)与baseDate.AddDays(5)等价的断言方式可作为理解In.Nine各成员行为的最小范例。与 On / InDate 等姊妹 API 的关系In.Nine只解决从现在/指定时刻起 9 个时间单位之后这一种语义FluentDate 家族还有两个平行的入口需要区分In除One~Ten嵌套类外还提供 12 个月的属性In.January等返回当前年份该月 1 日与XxxOf(int year)方法如In.SeptemberOf(2025)对应源码 In.Months.cs 及In.TheYear(int)见 In.csOn负责某月某日的绝对日期如On.January.The21st与In的相对偏移互补InDate面向DateOnly的版本InDate.SomeTimeFrom.cs在NET6_0_OR_GREATER条件下编译其DayFrom/WeekFrom/MonthFrom/YearFrom同时提供DateOnly与DateTime两种重载测试见 GeneratedFluentDateTests.cs 第 34–43 行。使用前提与注意事项目标框架In.Nine返回System.DateTime适用于所有 Humanizer 支持的目标框架若需纯日期无时间分量应改用InDate系列需 .NET 6 及以上。属性基于 UTCIn.Nine.Days等属性使用DateTime.UtcNow如需本地时间可自行将结果ToLocalTime()或直接改用接收date参数的方法。API 文档对应关系本文所依据的 API 文档为 Humanizer.In.Nine.md其中每个属性、方法的签名与语义描述均与生成源码一一对应可作为查阅完整成员清单的权威参考。赞分享开发工具【免费下载链接】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 In.Nine API 详解在 FluentDate 流畅日期体系中表达「9 个时间单位之后」Humanizer In.Nine API 详解在 FluentDate 流畅日期体系中表达「9 个时间单位之后」 In.Nine 是 Humanizer 库开发工具Humanizer In.Eight 详解用流式 API 表达8 个时间单位之后的日期Humanizer In.Eight 详解用流式 API 表达8 个时间单位之后的日期 导读 Humanizer.In.Eight 是 Humanizer开发工具Humanizer FluentDate 之 In.Ten用一行代码表达“从现在起 10 个时间单位之后”Humanizer FluentDate 之 In.Ten用一行代码表达“从现在起 10 个时间单位之后” 本篇技术指南以 Humanizer 的 API 参开发工具上一篇Swagger Codegen 生成的 Java 模型类 Name 文档深度解读同名属性、蛇形命名与保留字处理下一篇解密Cursor限制突破从限制本质到突破实践的深度探索创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
ESP32锂电池电量检测全攻略:分压设计、ADC校准与低功耗优化 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:34:55
微信小程序云开发实战:匿名薪资分享小程序从零到一 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:34:55
赖斯《数理统计和数据分析》全章节题解:R复现与避坑指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:34:55
librosa.filters 深入解析:Mel、Chroma、常Q小波基等滤波器组与窗函数工具 音频处理科研 【免费下载链接】librosa Python library for audio and music analysis 项目地址: https://gitcode.com/gh_mirrors/li/librosa 点击查看 免费下载 librosa.filters 是 librosa 中负责"滤波器组构建、窗函数处理及相关工具"的模块… · 2026/9/25 2:16:39
Matlab/Simulink直驱永磁风电机组并网仿真模型搭建与参数调试指南 1. 直驱永磁风电机组并网仿真模型到底在研究什么先说明一下,我这套模型最初是为了验证一个1.5MW级直驱永磁风电机组从风轮到并网口的完整控制逻辑。平时经常有人用"Matlab/Simulink直驱永磁风电机组并网仿真模型"搜资料,但拿到手后发现要么是d… · 2026/9/25 2:16:39
助记词碰撞TRC20:从BIP39推导到USDT余额扫描 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 2:16:39
GSM Abis接口信令分析实战:从E1物理层到SCCP第三层协议栈拆解 简介:这份资源围绕GSM网络中基站与基站控制器之间的ABIS接口展开,面向移动通信运维人员、网络优化工程师及通信专业学习者,帮助理解信令传输、资源管理与协议栈结构等核心机制。压缩包共99个文件,约33.57MB,以hpp与cpp… · 2026/9/25 2:16:33
深入理解 TypeScript 模板联合类型(Template Union Types):在类型层面组合字符串的实战指南 文档教程 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Open Source. 项目地址: https://gitcode.com/gh_mirrors/typ/typescript-book 点击查看 免费下载 本文以开源仓库 Th… · 2026/9/25 2:16:32
res-downloader 5 步上手:把视频号视频下载、音乐与 m3u8 存到本地 res-downloader 5 步上手:把视频号视频下载、音乐与 m3u8 存到本地 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader … · 2026/9/25 2:16:20
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37