新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer 流式日期 API 详解:On.December 十二月日期访问器完整指南

发布时间:2026/9/28 2:54:45来源:尧图网络
Humanizer 流式日期 API 详解:On.December 十二月日期访问器完整指南
开发工具【免费下载链接】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 的On.December类是 FluentDate 流式日期模块中针对十二月的专用访问器它把当前年份 12 月的第 N 天封装成一组以英文序数命名的静态只读属性The1stThe31st并提供一个The(int dayNumber)动态方法让开发者可以写出On.December.The25th这样接近自然语言的日期表达式替代晦涩的new DateTime(DateTime.Now.Year, 12, 25)。本文以 Humanizer 3.0.1 的 API 文档为主线结合仓库中 FluentDate 的源码、T4 模板与单元测试完整梳理该类的全部成员、实现原理与配套 API读完即可在业务代码中直接使用这套流式日期语法。类概览On.December 是什么On.December是定义在Humanizer命名空间下On静态类中的一个嵌套类API 文档给出的声明为public class On.December它继承自System.Object是一个纯粹的日期访问器容器类本身不保存状态所有成员均为static每次访问都基于当前年份实时构造并返回一个System.DateTime值。其设计目标非常单一——把「当前年份 12 月的第 N 天」这一高频日期构造场景从命令式的new DateTime(DateTime.Now.Year, 12, N)转换为声明式、可读、可自动补全的On.December.TheN表达式。using Humanizer; // 传统写法 var christmas new DateTime(DateTime.Now.Year, 12, 25); // Humanizer 流式写法二者等价 var christmas2 On.December.The25th;类中成员的完整构成如下成员类别成员名称返回类型语义具名属性 × 31The1st~The31stSystem.DateTime静态只读当前年份 12 月对应的具体日期动态方法 × 1The(int dayNumber)System.DateTime静态当前年份 12 月第dayNumber天31 个具名属性The1st The31st 速查表API 文档逐一列出了On.December的全部 31 个属性每个属性的签名模式完全一致以The10th为例public static System.DateTime The10th { get; }属性值的语义统一为「The Nth day of December of the current year」当前年份 12 月的第 N 天完整清单如下属性语义属性语义The1st12 月 1 日The17th12 月 17 日The2nd12 月 2 日The18th12 月 18 日The3rd12 月 3 日The19th12 月 19 日The4th12 月 4 日The20th12 月 20 日The5th12 月 5 日The21st12 月 21 日The6th12 月 6 日The22nd12 月 22 日The7th12 月 7 日The23rd12 月 23 日The8th12 月 8 日The24th12 月 24 日平安夜The9th12 月 9 日The25th12 月 25 日圣诞节The10th12 月 10 日The26th12 月 26 日The11th12 月 11 日The27th12 月 27 日The12th12 月 12 日The28th12 月 28 日The13th12 月 13 日The29th12 月 29 日The14th12 月 14 日The30th12 月 30 日The15th12 月 15 日The31st12 月 31 日跨年夜The16th12 月 16 日从仓库源码 src/Humanizer/FluentDate/On.Days.cs 可以看到December嵌套类的每个属性实现都极为直接——用当前年份与固定月份、日期构造DateTimepublic class December { public static DateTime The1st new(DateTime.Now.Year, 12, 1); public static DateTime The2nd new(DateTime.Now.Year, 12, 2); // …… public static DateTime The25th new(DateTime.Now.Year, 12, 25); // …… public static DateTime The31st new(DateTime.Now.Year, 12, 31); }这些属性全部是static只读属性{ get; }且无 setter因此每次访问都会依据调用时刻的DateTime.Now.Year实时计算天然具备跟随当前年份自动漂移的特性——代码无需随年份变化修改。The(int) 动态方法按编号取日期除 31 个具名属性外On.December还提供了一个参数化的静态方法public static System.DateTime The(int dayNumber);参数dayNumber类型System.Int32表示目标日期在 12 月中的号数合法范围 131返回值System.DateTime即当前年份 12 月第dayNumber天的日期。其源码实现见 On.Days.cs为public static DateTime The(int dayNumber) new(DateTime.Now.Year, 12, dayNumber);该方法与具名属性完全等价例如On.December.The(25)与On.December.The25th返回同一个日期。适合处理号数在运行时才确定的场景例如根据配置或用户输入动态取日期using Humanizer; int day ReadDayOfMonth(); // 例如 25 DateTime target On.December.The(day); // 12 月 25 日 // 也可以先判断再选择具名写法 DateTime newYearsEve On.December.The31st;需要注意The(dayNumber)直接以dayNumber作为DateTime构造函数的 day 参数若传入超出 131 的非法值如 0、32 或负数会由System.DateTime构造函数抛出参数异常。这一点可从源码中直接透传 dayNumber 构造的实现方式推断得出调用方应自行保证参数合法性。实现原理T4 模板驱动的代码生成On.December乃至整个On类并非手写维护而是由一个 T4 文本模板 src/Humanizer/FluentDate/On.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); // January ~ December public class # monthName # { … } }模板以2012 年闰年作为基准遍历 12 个月用DateTime.DaysInMonth(leapYear, month)获取各月天数——12 月因此得到 31 天恰好对应The1stThe31st的完整序列同时用扩展方法day.Ordinalize()见 src/Humanizer/OrdinalizeExtensions.cs把数字转换成英文序数1 → 1st、2 → 2nd、3 → 3rd、4 → 4th……从而生成The1st、The2nd、The3rd、The4th这类属性名。这意味着十二个月的On.Month嵌套类由同一套模板产出结构完全对称On.JanuaryOn.December均位于 On.Days.cs属性名的英文序数拼写由Ordinalize()统一保证正确性如21 → 21st、22 → 22nd、23 → 23rd、31 → 31st这也是The21st、The22nd、The23rd、The31st等特殊拼写无需手工维护的原因生成代码与模板一一对应On.Days.cs 中December类的 XML 注释「Provides fluent date accessors for December」同样来自模板输出。与周边流式日期 API 的协作On.December只是 Humanizer FluentDate 体系中的一环实践中常与下列同类 API 组合使用1.In.December/In.DecemberOf(int year)—— 取整月首日DateTime位于 src/Humanizer/FluentDate/In.Months.cs返回的是 12 月 1 日而非任意一天public static DateTime December new(DateTime.UtcNow.Year, 12, 1); public static DateTime DecemberOf(int year) new(year, 12, 1);2.OnDate.December—— 取任意一天DateOnly.NET 6位于 src/Humanizer/FluentDate/OnDate.Days.cs与On.December结构一致但返回System.DateOnly适用于只需日期、无需时间分量的 .NET 6 场景// #if NET6_0_OR_GREATER 条件下可用 DateOnly christmas OnDate.December.The25th;3.InDate.December/InDate.DecemberOf(int year)—— 取整月首日DateOnly位于 src/Humanizer/FluentDate/InDate.Months.cs是In系列的 DateOnly 版本同样仅在 .NET 6 编译。四者组合可以覆盖 12 月相关的全部常见构造需求using Humanizer; DateTime dec1 In.December; // 今年 12 月 1 日DateTime DateTime dec1of25 In.DecemberOf(2025); // 2025 年 12 月 1 日 DateTime dec25 On.December.The25th; // 今年 12 月 25 日 DateOnly d25 OnDate.December.The25th; // 今年 12 月 25 日DateOnly, .NET 6测试验证仓库中的可复现证据Humanizer 为 FluentDate 提供了对应的单元测试可直接作为 API 行为契约参考tests/Humanizer.Tests/FluentDate/OnTests.cs 验证了On.December.The4th等价于new(DateTime.Now.Year, 12, 4)[Fact] public void OnDecemberThe4th() Assert.Equal(new(DateTime.Now.Year, 12, 4), On.December.The4th);tests/Humanizer.Tests/FluentDate/OnDateTests.cs 在#if NET6_0_OR_GREATER条件下验证了 DateOnly 版本的OnDate.December.The4th同文件还验证了动态方法On.February.The(11)等价于new(DateTime.Now.Year, 2, 11)说明The(int)与具名属性遵循同一实现约定。完整的流式日期示例工程见 website/docs/_examples/scenarios-fluent-dates/可在其中查看该类 API 在真实项目中的用法。使用建议与注意事项当前年份取自本地时间从 On.Days.cs 可以看到On.December系列使用DateTime.Now.Year本地时区年份而In.DecemberIn.Months.cs使用的是DateTime.UtcNow.YearUTC 年份。在跨时区应用中两者在年末年初交界处可能返回不同年份需要按业务语义选择。跨年边界行为由于年份在访问时才解析On.December.The31st在 12 月 31 日当天访问返回当年的 12 月 31 日若在次年 1 月 1 日访问则返回新一年的 12 月 31 日。若需固定某一年份的日期应改用In.DecemberOf(year)与手动构造组合或直接使用new DateTime(year, 12, day)。参数合法性The(int dayNumber)的合法输入为 131传入非法号数会由DateTime构造抛出异常建议在动态取号场景中先做范围校验。类型选择只需日期无时间分量且运行于 .NET 6 时优先考虑OnDate.December返回DateOnly避免引入无意义的TimeOfDay分量需要DateTime如与旧代码或数据库交互时使用On.December。小结On.December是 Humanizer FluentDate 模块中结构最完整的月份访问器之一31 个具名静态属性覆盖 12 月的每一天The(int)方法提供动态取号能力二者都由 On.Days.tt 模板基于闰年基准统一生成并通过 OnTests.cs 等测试固化行为契约。配合In.December、OnDate.December、InDate.December等兄弟 API可以在不引入任何运行时依赖的情况下把 12 月相关的日期构造代码写得如同英文自然语言一样直白可读。赞分享开发工具【免费下载链接】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.December 与十二月日期快速构造指南Humanizer 流式日期 API 详解On.December 与十二月日期快速构造指南 导读 Humanizer 的 On 类为 .NET 开发者提供了一开发工具Humanizer 流式日期 API 详解OnDate.October 与十月日期访问器Humanizer 流式日期 API 详解OnDate.October 与十月日期访问器 导读 本文围绕 Humanizer 项目中 OnDate.Octob开发工具Humanizer 流式日期 API 详解OnDate.October 十月日期访问器使用指南Humanizer 流式日期 API 详解OnDate.October 十月日期访问器使用指南 本篇技术指南聚焦 Humanizer 库中 OnDate.Oc开发工具上一篇Jupyter 笔记本格式转换与文档处理nbconvert 与 nbformat 深入解析下一篇OpCore Simplify黑苹果配置的智能自动化技术革命创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

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

较早相关资讯

最新相关资讯

2026国产定制化智能体系统横评:比OpenClaw更安全的私有化替代方案商选型与TaoToken配置实战 2026/9/28 4:02:15

2026国产定制化智能体系统横评:比OpenClaw更安全的私有化替代方案商选型与TaoToken配置实战

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

阅读更多 →
63页PPT带你入门 Openclaw:从零搭建到 TaoToken 统一 Key 配置实战 2026/9/28 4:02:15

63页PPT带你入门 Openclaw:从零搭建到 TaoToken 统一 Key 配置实战

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

阅读更多 →
AI 辅助编码时代的产研测全链路 Harness 规范系统:用 TaoToken 统一 Key 打通配置骨架 2026/9/28 4:02:15

AI 辅助编码时代的产研测全链路 Harness 规范系统:用 TaoToken 统一 Key 打通配置骨架

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

阅读更多 →
Codex 搭配 deepseekV4 安装方案:TaoToken 统一 Key 接入与 config.toml 配置骨架 2026/9/28 4:02:15

Codex 搭配 deepseekV4 安装方案:TaoToken 统一 Key 接入与 config.toml 配置骨架

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

阅读更多 →
IntelliJ IDEA 2026.1 全面拥抱 AI:用 TaoToken 统一 Key 打通 AI 助手与不中断 Debug 工作流 2026/9/28 4:02:15

IntelliJ IDEA 2026.1 全面拥抱 AI:用 TaoToken 统一 Key 打通 AI 助手与不中断 Debug 工作流

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

阅读更多 →
Hermes Desktop 重磅发布:AI 代理告别终端时代,TaoToken 统一 Key 接入本土化智能新纪元 2026/9/28 4:02:02

Hermes Desktop 重磅发布:AI 代理告别终端时代,TaoToken 统一 Key 接入本土化智能新纪元

/* 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
📞 ✉