
开发工具【免费下载链接】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 的OnDate.November是一个面向 11 月的流式Fluent日期访问类它把当前年份 11 月的某一天封装成 30 个静态只读属性The1st~The30th与一个通用方法The(int dayNumber)全部返回 .NET 6 的System.DateOnly类型。本文以 3.0.1 版本文档为基础结合源码与测试完整讲解该类 30 个属性、The(int)方法的签名与语义、T4 模板生成机制、与On.November返回DateTime的差异以及可直接运行的实战示例帮助你告别new DateTime(...)式的样板代码用一行表达式写出可读性极强的日期字面量。类概览位置、命名空间与编译条件OnDate.November是Humanizer.OnDate类的内嵌嵌套公共类声明如下public class OnDate.November命名空间Humanizer因此引入using Humanizer;即可直接使用继承关系System.Object→November本身不继承任何自定义基类成员性质所有成员均为public static类为无状态工具类无需实例化编译条件整个OnDate类型族被#if NET6_0_OR_GREATER包裹见 OnDate.Days.cs因为其成员返回System.DateOnly——这是 .NET 6 起引入的只含日期、不含时间的值类型。如果你的目标框架低于 .NET 6该类不可用此时应改用返回DateTime的 On.November。该类解决的问题很具体构造当前年份 11 月 指定日的日期值。无论今天是哪一年OnDate.November.The10th总是返回当年 11 月 10 日的DateOnly年份由DateTime.Now.Year在运行时动态取用。30 个静态属性The1st到The30th完整清单OnDate.November为 11 月的每一天1 日到 30 日都预置了一个静态只读属性。完整清单如下签名统一为public static System.DateOnly语义均为当前年份 11 月的对应日期属性语义属性语义The1st当前年 11 月 1 日The16th当前年 11 月 16 日The2nd当前年 11 月 2 日The17th当前年 11 月 17 日The3rd当前年 11 月 3 日The18th当前年 11 月 18 日The4th当前年 11 月 4 日The19th当前年 11 月 19 日The5th当前年 11 月 5 日The20th当前年 11 月 20 日The6th当前年 11 月 6 日The21st当前年 11 月 21 日The7th当前年 11 月 7 日The22nd当前年 11 月 22 日The8th当前年 11 月 8 日The23rd当前年 11 月 23 日The9th当前年 11 月 9 日The24th当前年 11 月 24 日The10th当前年 11 月 10 日The25th当前年 11 月 25 日The11th当前年 11 月 11 日The26th当前年 11 月 26 日The12th当前年 11 月 12 日The27th当前年 11 月 27 日The13th当前年 11 月 13 日The28th当前年 11 月 28 日The14th当前年 11 月 14 日The29th当前年 11 月 29 日The15th当前年 11 月 15 日The30th当前年 11 月 30 日例如OnDate.November.The10th的完整声明摘自源码属性实现为表达式体/// summary /// The 10th day of November of the current year /// /summary public static DateOnly The10th new(DateTime.Now.Year, 11, 10);可以看到属性名中的1st / 2nd / 3rd / 21st / 22nd / 23rd等后缀使用了英文序数词ordinal而非简单数字这与 Humanizer 整体的自然语言优先设计一致——代码读起来就像一句英文句子On November, the 10th。通用方法The(int dayNumber)当需要以变量形式指定日期例如来自用户输入或循环遍历时使用通用方法public static System.DateOnly The(int dayNumber);参数dayNumber类型System.Int32表示 11 月中的第几天返回值System.DateOnly实现new(DateTime.Now.Year, 11, dayNumber)见 OnDate.Days.cs。典型用法using Humanizer; int day 17; DateOnly meetingDay OnDate.November.The(day); // 当前年 11 月 17 日需要注意The(int)与 30 个固定属性在语义上完全等价OnDate.November.The(10)与OnDate.November.The10th返回相同的DateOnly值。dayNumber的取值范围应落在 130 之间11 月有 30 天传入超出范围的值时DateOnly构造器会抛出ArgumentOutOfRangeException这与直接new DateOnly(year, 11, day)的行为一致。源码级原理T4 模板自动生成整个OnDate月份族OnDate.November并不是手写的 30 个重复属性而是由 T4 文本模板 OnDate.Days.tt 在构建时生成到 OnDate.Days.cs 的。模板的核心逻辑节选const int leapYear 2012; for (var month 1; month 12; month) { var firstDayOfMonth new DateTime(leapYear, month, 1); var monthName firstDayOfMonth.ToString(MMMM); // 为每个月生成一个嵌套类类名即月份英文名 public class # monthName # { public static DateOnly The(int dayNumber) new(DateTime.Now.Year, # month #, dayNumber); // 遍历该月每一天天数取自闰年 2012保证 2 月有 29 天 for (var day 1; day DateTime.DaysInMonth(leapYear, month); day) { var ordinalDay day.Ordinalize(); // 1 - 1st, 2 - 2nd, 3 - 3rd ... public static DateOnly The# ordinalDay # new(DateTime.Now.Year, # month #, # day #); } } }从中可以提炼三个关键实现事实月份名来自ToString(MMMM)November这个类名由 2012 年 11 月的MMMM格式输出生成因此 12 个嵌套类January~December的命名规则完全一致属性名使用Ordinalize()属性后缀1st、2nd、3rd……由 Humanizer 自己的序数化扩展OrdinalizeExtensions.cs生成这也是整个 FluentDate 系列 API 名称风格的来源以闰年 2012 为模板计算每月天数DateTime.DaysInMonth(2012, 11)得到 30因此 11 月的生成产物恰好是The1st~The30th共 30 个属性与文档中的 API 清单一一对应。从源码结构可以推断OnDate系列共包含 12 个月份嵌套类每个类都遵循同一套30 天左右固定属性 1 个通用The(int)方法的模式本文讨论的November只是其中之一。OnDate.November与On.November的区别Humanizer 的 FluentDate 里还有一对容易混淆的姊妹类On.November位于 On.Days.cs与OnDate.November。两者表面签名一致但返回值类型不同对比项On.NovemberOnDate.November返回类型System.DateTimeSystem.DateOnly典型成员The(int)、The1st~The30thThe(int)、The1st~The30th框架要求无特殊要求仅NET6_0_OR_GREATER适用场景需要同时携带时间部分、或与DateTimeAPI 互操作只关心日期本身、需要纯净的日期语义选择建议在 .NET 6 且业务上只关心年月日如节日、账单日、纪念日时优先使用OnDate.November能避免DateTime携带的00:00:00时间分量带来的比较与格式化歧义需要保留时间或兼容旧框架时再使用On.November。实战示例与At()组合构造精确时间点FluentDate 家族不止提供哪一天还通过PrepositionsExtensions提供.At(hour, minute)扩展可以把DateOnly/DateTime与时刻组合起来。结合 scenarios-fluent-dates 示例 的用法风格一个完整的11 月会议安排示例可以这样写using Humanizer; // 当前年 11 月 10 日DateOnly DateOnly auditDay OnDate.November.The10th; // 当前年 11 月第 17 天变量形式 DateOnly reviewDay OnDate.November.The(17); // 直接打印 Console.WriteLine($Audit: {auditDay:yyyy-MM-dd}); // 如 2026-11-10 Console.WriteLine($Review: {reviewDay:yyyy-MM-dd}); // 如 2026-11-17如果项目目标是 .NET 6还可以把DateOnly与DateTime统一到同一套流式表达中——例如用In.AprilOf(2025).AddDays(2).At(14, 30)表达2025 年 4 月 2 日 14:30与OnDate.November的语义互补。测试佐证行为已被单元测试锁定Humanizer 为 FluentDate 系列编写了专门的测试 OnDateTests.cs其中针对固定属性与通用方法两类 API 都有断言[Fact] public void OnJanuaryThe23rd() Assert.Equal(new(DateTime.Now.Year, 1, 23), OnDate.January.The23rd); [Fact] public void OnDecemberThe4th() Assert.Equal(new(DateTime.Now.Year, 12, 4), OnDate.December.The4th); [Fact] public void OnFebruaryThe() Assert.Equal(new(DateTime.Now.Year, 2, 11), OnDate.February.The(11));从这些测试可以确认三条行为约定同样适用于OnDate.November年份始终取DateTime.Now.Year即当前自然年测试期望值也是用DateTime.Now.Year构造的固定属性与The(int)方法结果一致内部都走new DateOnly(year, month, day)这一条路径测试文件同样以#if NET6_0_OR_GREATER条件编译与 API 的框架约束保持一致。使用注意事项小结框架前提OnDate.November仅在 .NET 6 及以上目标框架可用DateOnly类型依赖项目文件需满足该条件年份语义返回的是当前运行年份的 11 月日期而不是指定年份——如果需要指定年份应改用In.AprilOf(year)这类接受年份参数的方法族或自行new DateOnly(year, 11, day)取值范围11 月固定 30 天The(int)的参数建议在 130 之间越界会抛出参数异常与DateTime的互操作若需要把结果转成DateTime可直接使用DateOnly的ToDateTime(TimeOnly)实例方法补上时刻分量。总而言之OnDate.November用 31 个静态成员30 个属性 1 个方法把当前年 11 月任意一天这一常见日期构造需求收敛为纯流式、零样板代码的表达式配合 Humanizer 其他 FluentDate 类On、OnDate、In、InDate可以组成一套完整的、可读性极强的日期 DSL。赞分享开发工具【免费下载链接】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 OnDate.December 完全指南用 Fluent API 构造当前年份十二月的 DateOnly 日期Humanizer OnDate.December 完全指南用 Fluent API 构造当前年份十二月的 DateOnly 日期 本篇技术指南聚焦 Huma开发工具Humanizer OnDate.January 流式 API 详解用一行代码构造当年 1 月的任意 DateOnly 日期Humanizer OnDate.January 流式 API 详解用一行代码构造当年 1 月的任意 DateOnly 日期 Humanizer 的 Flue开发工具Humanizer 流式日期 API 详解用 OnDate.November 在 .NET 中链式构造 11 月 DateOnly 日期Humanizer 流式日期 API 详解用 OnDate.November 在 .NET 中链式构造 11 月 DateOnly 日期 本篇技术指南聚焦 H开发工具上一篇Tesseract4Android终极指南打造智能文字识别应用下一篇终极免费唇语识别工具5分钟让你的嘴唇变成输入法创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考