尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Humanizer 流式日期 API 详解:OnDate.July 与当前年份 7 月的 DateOnly 日期访问器

发布时间:2026/9/27 8:00:13

资讯中心
01
ARTICLE

Humanizer 流式日期 API 详解:OnDate.July 与当前年份 7 月的 DateOnly 日期访问器

Humanizer 流式日期 API 详解:OnDate.July 与当前年份 7 月的 DateOnly 日期访问器
开发工具【免费下载链接】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点击查看免费下载OnDate.July是 Humanizer 流式日期Fluent Date体系中的一个嵌套静态访问器类专门用于以自然语言风格获取“当前年份 7 月的第 N 天”并返回 .NET 6 引入的System.DateOnly值类型。本文以该类的 API 参考文档为主体结合 OnDate.Days.cs 源码实现、OnDate.Days.tt T4 模板及 OnDateTests.cs 测试用例完整梳理其 31 个静态属性、The(int)动态方法、生成机制与使用注意事项让你在业务代码中写出OnDate.July.The4th这样可读性极强的日期构造表达式。一、类概览OnDate.July 是什么根据 Humanizer.OnDate.July.md 的 API 参考OnDate.July定义如下public class OnDate.July它继承自System.Object是Humanizer命名空间下OnDate类的嵌套类型职责是“为 7 月提供流式日期访问器Provides fluent date accessors for July”。在源码 OnDate.Days.cs 中该类的真实声明为namespace Humanizer; public class OnDate { public class July { /// summary /// The nth day of July of the current year /// /summary public static DateOnly The(int dayNumber) new(DateTime.Now.Year, 7, dayNumber); /// summary /// The 1st day of July of the current year /// /summary public static DateOnly The1st new(DateTime.Now.Year, 7, 1); // ... The2nd ~ The31st } }两点关键实现事实返回类型为System.DateOnly该类整体位于#if NET6_0_OR_GREATER条件编译块内见 OnDate.Days.cs因此只有在目标框架为 .NET 6 及以上时该类型才可用。若项目面向 .NET Framework 4.8 或 .NET Core 3.1则只能使用返回DateTime的On.July。静态无状态设计所有成员都是public static无需实例化直接以OnDate.July.The4th的形式调用。二、31 个静态日期属性The1st 到 The31stOnDate.July为 7 月的每一天都预置了一个命名属性命名规则为The 英文序数词1st、2nd、3rd、4th…。所有属性的签名完全一致public static System.DateOnly The10th { get; }属性返回日期当前年份的 7 月属性返回日期当前年份的 7 月The1st7 月 1 日The17th7 月 17 日The2nd7 月 2 日The18th7 月 18 日The3rd7 月 3 日The19th7 月 19 日The4th7 月 4 日The20th7 月 20 日The5th7 月 5 日The21st7 月 21 日The6th7 月 6 日The22nd7 月 22 日The7th7 月 7 日The23rd7 月 23 日The8th7 月 8 日The24th7 月 24 日The9th7 月 9 日The25th7 月 25 日The10th7 月 10 日The26th7 月 26 日The11th7 月 11 日The27th7 月 27 日The12th7 月 12 日The28th7 月 28 日The13th7 月 13 日The29th7 月 29 日The14th7 月 14 日The30th7 月 30 日The15th7 月 15 日The31st7 月 31 日The16th7 月 16 日7 月是 31 天的大月因此该类提供全部 31 个属性。每个属性的属性值类型都是System.DateOnly其计算逻辑完全一致取DateTime.Now.Year作为年份、固定 7 作为月份、属性名对应的日号构造DateOnly。典型用法using Humanizer; DateOnly independenceDay OnDate.July.The4th; // 当前年份的 7 月 4 日 DateOnly bastilleDay OnDate.July.The14th; // 当前年份的 7 月 14 日三、动态方法The(int dayNumber)除预置属性外OnDate.July还提供方法The(int)用于按传入的日号动态构造日期public static System.DateOnly The(int dayNumber);参数说明dayNumber类型System.Int32表示 7 月中的第几天返回值System.DateOnly即new DateOnly(DateTime.Now.Year, 7, dayNumber)。示例DateOnly target OnDate.July.The(20); // 等价于 OnDate.July.The20th需要注意由于该方法直接将参数透传给DateOnly构造函数传入超出 7 月合法范围的日号如0、32会触发DateOnly构造函数对非法日期的参数校验并抛出异常同时该方法同样依赖DateTime.Now只适用于需要“当前年份某一天”的场景。四、源码背后T4 模板批量生成机制OnDate.July这类重复度极高的代码并非手写而是由 T4 模板 OnDate.Days.tt 自动生成。模板核心逻辑如下节选关键片段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 for (var day 1; day DateTime.DaysInMonth(leapYear, month); day) { var ordinalDay day.Ordinalize(); // 生成 public static DateOnly TheordinalDay } }从模板可以看出两层设计以闰年 2012 为基准枚举月份与天数2012 年 2 月有 29 天因此February类额外包含The29th而 7 月无论平闰都是 31 天July类固定生成The1st~The31st。属性名复用 Humanizer 自身的Ordinalize()扩展日号 1~31 经day.Ordinalize()得到1st、2nd、3rd…31st再拼成属性名The1st、The2nd、The3rd…The31st保证英文序数词后缀st/nd/rd/th完全正确。这份模板同时生成 1~12 月共 12 个嵌套类July只是其中一员生成的完整代码即 OnDate.Days.cs共 2336 行July类位于第 1164~1360 行。五、OnDate.July 与 On.July 的取舍DateOnly vs DateTimeHumanizer 提供了两套并行的流式日期访问器对比项OnDate.JulyOn.July返回类型System.DateOnly仅日期无时间分量System.DateTime含时间分量默认午夜可用框架仅#if NET6_0_OR_GREATER所有目标框架实现文件OnDate.Days.csOn.Days.cs成员形态The1st~The31stThe(int)The1st~The31stThe(int)On.July的实现与之同构区别仅在构造器类型new DateTime(DateTime.Now.Year, 7, dayNumber)见 On.Days.cs。选型建议当业务只关心“几月几日”、不需要时间分量且项目已基于 .NET 6 时优先使用OnDate.July获得更精确的语义若需要与旧框架兼容或需要完整的DateTime如继续参与时间运算则使用On.July。对应地InDate与In也分别提供DateOnly与DateTime版本的相对日期表达式构成完整的流式日期 API 家族参见 fluent-dates-and-time-spans.mdx 与 Humanizer.OnDate.md。六、测试验证与使用注意事项测试证据仓库中的 OnDateTests.cs 验证了这套流式日期的行为模式同样受#if NET6_0_OR_GREATER保护[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));这些用例确认了访问器的核心契约返回值的年份恒等于调用时刻的DateTime.Now.Year月份与日号由属性名/参数决定。OnDate.July的所有成员遵循同一契约。使用注意事项非确定性依赖系统时钟OnDate.July.The4th的结果取决于调用时刻的“当前年份”。官方场景文档明确提醒此类不带From或Of(year)后缀的属性读取DateTime.Now应避免在需要确定性的代码如幂等计算、测试断言中的固定日期中直接使用参见 fluent-dates-and-time-spans.mdx。跨年边界调用时前后两次访问可能得到不同年份。框架条件编译OnDate.July只在NET6_0_OR_GREATER下编译在旧框架项目中引用会直接编译失败请改用On.July。日号边界The(int)的dayNumber必须落在 1~31 的有效区间内非法值由DateOnly构造逻辑抛错预置属性不存在越界问题July恰好包含到The31st。七、相关 API 导航类总览Humanizer.OnDate.md12 个月份嵌套类与OnDate类型说明本文主题文档Humanizer.OnDate.July.mdDateTime版本On.Days.cs、Humanizer.On.md相对日期DateOnlyInDate.Months.cs、InDate.SomeTimeFrom.cs位于 src/Humanizer/FluentDate/应用场景指南fluent-dates-and-time-spans.mdx综上OnDate.July以“英语序数词属性 当前年份 DateOnly”的组合把 7 月的日期构造压缩为一行自解释代码。无论是OnDate.July.The4th这类固定日期的语义化表达还是OnDate.July.The(dayNumber)的动态取值它都是 Humanizer 流式日期 API 中简单、克制又极具可读性的基础构件。赞分享开发工具【免费下载链接】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 详解On.September 类当前年份 9 月日期访问器Humanizer 流式日期 API 详解On.September 类当前年份 9 月日期访问器 本篇技术指南聚焦 Humanizer 流式日期Flue开发工具Humanizer OnDate.July 流式日期访问器详解一行代码生成当年 7 月的任意日期Humanizer OnDate.July 流式日期访问器详解一行代码生成当年 7 月的任意日期 OnDate.July 是 Humanizer Fluent开发工具Humanizer 流式日期 API 详解OnDate.August 快速生成 8 月任意日期的 DateOnly 访问器Humanizer 流式日期 API 详解OnDate.August 快速生成 8 月任意日期的 DateOnly 访问器 本篇技术指南聚焦 Humanize开发工具上一篇终极Bilibili工具箱指南如何高效下载B站视频、番剧与弹幕下一篇CSS Scope Inline核心原理揭秘MutationObserver如何实现无构建的样式作用域创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。