尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Humanizer `On.March` 流式日期访问器完全指南:三月 31 个日期属性与源码实现解析
开发工具【免费下载链接】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.March类展开它是流式日期Fluent DateAPI 家族中专门表达当前年份三月的某一天的静态访问器集合。读完本文你将掌握On.March.The1stThe31st全部 31 个日期属性的准确语义与返回类型、The(int dayNumber)方法的动态取值用法并理解这些 API 由 T4 模板批量生成的底层原理、与At/AtNoon/AtMidnight等介词扩展的组合套路以及读取当前年份这一行为在可重复测试与确定型代码中的注意事项。On.March类概览On.March是嵌套在静态类On内部的公共类位于Humanizer命名空间下用于为三月提供流式日期访问器fluent date accessorspublic class On.March从继承关系看它是一个直接继承自System.Object的普通类类内所有成员都是public static因此使用时不需实例化直接以On.March.xxx形式调用。该类的完整源码位于 src/Humanizer/FluentDate/On.Days.cs整个On类在同一文件中按月份嵌套定义了JanuaryDecember共 12 个类似的月类。在 Humanizer 的日期 API 体系中On系列承担构造日历日期的职责On.April.The3rd、On.March.The15th这类调用读起来就是一句自然语言。配套的还有提供DateOnly变体的OnDate类以及表示将来时间的In系列如In.Two.MonthsFrom(startingPoint)三者共同构成 website/docs/scenarios/fluent-dates-and-time-spans.mdx 中描述的可读性日期构造器。完整 API 清单31 个静态日期属性On.March为三月的每一天1 日至 31 日提供对应的静态属性命名采用序数词后缀The1st、The2nd、The3rd……每个属性的返回值都是System.DateTime语义统一为当前年份三月的第 N 天。属性总表属性名说明返回类型On.March.The1st当前年份三月的第 1 天System.DateTimeOn.March.The2nd当前年份三月的第 2 天System.DateTimeOn.March.The3rd当前年份三月的第 3 天System.DateTimeOn.March.The4th当前年份三月的第 4 天System.DateTimeOn.March.The5th当前年份三月的第 5 天System.DateTimeOn.March.The6th当前年份三月的第 6 天System.DateTimeOn.March.The7th当前年份三月的第 7 天System.DateTimeOn.March.The8th当前年份三月的第 8 天System.DateTimeOn.March.The9th当前年份三月的第 9 天System.DateTimeOn.March.The10th当前年份三月的第 10 天System.DateTimeOn.March.The11th当前年份三月的第 11 天System.DateTimeOn.March.The12th当前年份三月的第 12 天System.DateTimeOn.March.The13th当前年份三月的第 13 天System.DateTimeOn.March.The14th当前年份三月的第 14 天System.DateTimeOn.March.The15th当前年份三月的第 15 天System.DateTimeOn.March.The16th当前年份三月的第 16 天System.DateTimeOn.March.The17th当前年份三月的第 17 天System.DateTimeOn.March.The18th当前年份三月的第 18 天System.DateTimeOn.March.The19th当前年份三月的第 19 天System.DateTimeOn.March.The20th当前年份三月的第 20 天System.DateTimeOn.March.The21st当前年份三月的第 21 天System.DateTimeOn.March.The22nd当前年份三月的第 22 天System.DateTimeOn.March.The23rd当前年份三月的第 23 天System.DateTimeOn.March.The24th当前年份三月的第 24 天System.DateTimeOn.March.The25th当前年份三月的第 25 天System.DateTimeOn.March.The26th当前年份三月的第 26 天System.DateTimeOn.March.The27th当前年份三月的第 27 天System.DateTimeOn.March.The28th当前年份三月的第 28 天System.DateTimeOn.March.The29th当前年份三月的第 29 天System.DateTimeOn.March.The30th当前年份三月的第 30 天System.DateTimeOn.March.The31st当前年份三月的第 31 天System.DateTime方法The(int dayNumber)除了 31 个命名属性On.March还提供一个参数化方法用于动态取得三月的任意一天public static System.DateTime The(int dayNumber);参数dayNumber类型System.Int32表示目标日期在三月中的日序号131。返回System.DateTime即当前年份三月第dayNumber天。边界行为从源码new(DateTime.Now.Year, 3, dayNumber)可以看出dayNumber会直接传入DateTime构造函数超出 131 范围例如The(32)或The(0)会抛出ArgumentOutOfRangeException这是由System.DateTime构造函数本身强制校验的Humanizer 未做额外包装。参数化方法与命名属性的取舍很直接写死业务日期如营销活动固定为 3 月 14 日用The14th更自文档化日期来自变量或计算结果时用The(dayNumber)。源码实现一行表达式与 T4 模板批量生成On.March的每个成员实现都极其精简本质是对DateTime构造函数的封装。以属性The1st为例源码为public static DateTime The1st new(DateTime.Now.Year, 3, 1);即取当前系统时间的年份固定月份 3固定日序号返回值带 0 时 0 分 0 秒不携带时区信息。The(int dayNumber)同理public static DateTime The(int dayNumber) new(DateTime.Now.Year, 3, dayNumber);从源码结构看这段代码并非手写 12 个月 × 各自天数的大量样板而是由一个 T4 文本模板批量生成的。src/Humanizer/FluentDate/On.Days.tt 中模板以 2012 年闰年用于覆盖 2 月 29 日为基准遍历 12 个月用firstDayOfMonth.ToString(MMMM)取得英文月份名作为嵌套类名再用day.Ordinalize()生成The1st、The2nd……这种序数后缀for (var day 1; day DateTime.DaysInMonth(leapYear, month); day) { var ordinalDay day.Ordinalize(); // 生成 public static DateTime TheordinalDay new(DateTime.Now.Year, month, day); }Ordinalize()是 Humanizer 自身的序数词扩展实现位于 src/Humanizer/OrdinalizeExtensions.cs模板由此保证1 → 1st、2 → 2nd、3 → 3rd、21 → 21st等英文序数后缀的规范性。这也是为什么On.March的 31 个属性名严格遵循英文序数词形。顺带一提模板对每个月的天数取自闰年 2012 的DateTime.DaysInMonth所以二月生成到The29th而三月固定生成 31 个属性——三月在任何年份都有 31 天因此On.March不存在闰年下溢问题。组合用法从三月某日到完整时间点On.March.TheNth只产出日期时间为 00:00:00。要拼出完整的业务时间点可与 PrepositionsExtensions 提供的扩展方法链式组合using Humanizer; // 当前年份 3 月 14 日 14:30:00 var piDay On.March.The14th.At(14, 30); // 当前年份 3 月 1 日 12:00:00 var noon On.March.The1st.AtNoon(); // 当前年份 3 月 31 日 00:00:00 var monthEndMidnight On.March.The31st.AtMidnight(); // 动态日序号某月的第 n 天 var dynamicDay On.March.The(dayNumber);At(int hour, int min 0, int second 0, int millisecond 0)允许一次性指定时、分、秒、毫秒AtNoon()等价于At(12)AtMidnight()等价于At(0)。官方可运行示例 website/docs/_examples/scenarios-fluent-dates/Program.cs 演示了同类用法如In.AprilOf(2025).AddDays(2).At(14, 30)可直接参照此模式组织三月日程。如需将三月日期固定到指定年份而非当前年份可用PrepositionsExtensions.In(int year)var marchFirst2026 On.March.The1st.In(2026); // 2026-03-01 00:00:00若目标框架支持DateOnly.NET 6可改用OnDate.March系列源码见 src/Humanizer/FluentDate/OnDate.Days.cs其 API 形状与On.March完全一致只是返回System.DateOnly。测试验证Humanizer 测试套件 tests/Humanizer.Tests/FluentDate/OnTests.cs 直接验证了On系列访问器与当前年份构造的等价性[Fact] public void OnJanuaryThe23rd() Assert.Equal(new(DateTime.Now.Year, 1, 23), On.January.The23rd); [Fact] public void OnDecemberThe4th() Assert.Equal(new(DateTime.Now.Year, 12, 4), On.December.The4th); [Fact] public void OnFebruaryThe() Assert.Equal(new(DateTime.Now.Year, 2, 11), On.February.The(11));这些断言确认了两点实现事实命名属性与new DateTime(DateTime.Now.Year, month, day)完全等价The(dayNumber)方法同样以DateTime.Now.Year为年份基准。On.March的成员遵循同一模板逻辑行为可由此类推。使用注意事项与边界依赖当前年份On.March所有成员都读取DateTime.Now.Year因此结果随调用时刻变化。官方场景文档 website/docs/scenarios/fluent-dates-and-time-spans.mdx 明确建议在需要可重复执行的代码或测试中避免依赖当前时间的访问器应注入固定起始日期例如用In.Two.MonthsFrom(startingPoint)配合显式DateTime或直接用In(2026)/OnDate固定年份。本地时间而非 UTCDateTime.Now是本地时钟时间跨时区部署时同一代码在不同服务器上会得到不同结果需要 UTC 语义时应自行用DateTime.UtcNow.Year组合构造。时间部分恒为 0属性与The(n)返回的时间均为午夜零点需要具体时刻务必再接At/AtNoon/AtMidnight。参数范围The(dayNumber)的dayNumber越界会抛异常三月固定 31 天不存在 2 月 29 日式的闰年特例。API 归属On.March属于 Humanizer 的Humanizer.FluentDate命名空间文件组见 src/Humanizer/FluentDate 目录随主程序集一并分发引入using Humanizer;即可使用无需额外安装独立包。相关 API 与延伸阅读同族 API[On类12 个月完整访问器源码 src/Humanizer/FluentDate/On.Days.cs](website/docs/api/Humanizer.On.md)、OnDate类DateOnly变体配套扩展PrepositionsExtensionsAt/AtNoon/AtMidnight/In(year)实战场景流式组合日期与时长 及官方示例 Program.cs测试佐证OnTests.cs简而言之On.March.The14th一类调用把三月十四日变成了可读、可组合、类型安全的 C# 表达式——在报表截止日、活动排期、账单日等固定日历场景中它比手写new DateTime(DateTime.Now.Year, 3, 14)更贴近业务语义也让代码评审者一眼读懂意图。赞分享开发工具【免费下载链接】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.March 全解析3 月日期构建 API 的用法与源码实现Humanizer 流畅日期访问器 On.March 全解析3 月日期构建 API 的用法与源码实现 导读 On.March 是 Humanizer 流畅日期开发工具Stable-Baselines3 Logger 完整指南自定义日志格式与训练指标解读Stable Baselines3 Logger 完整指南自定义日志格式与训练指标解读 Stable Baselines3SB3内置了一套灵活的日志系统开发工具Humanizer 流式日期 API 详解On.June 六月日期访问器完全指南Humanizer 流式日期 API 详解On.June 六月日期访问器完全指南 本篇技术指南围绕 Humanizer 流式日期Fluent DateAP开发工具上一篇ComfyUI-WanVideoWrapper如何在10分钟内生成1025帧长视频的完整指南 下一篇AI 文献综述怎么做Scientific Agent Skills 论文全文检索 假设生成 证据溯源写作完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Flutter Engine 在 Fuchsia 上的 Dart AOT Runner 集成测试:从环境搭建到源码级原理

Flutter Engine 在 Fuchsia 上的 Dart AOT Runner 集成测试:从环境搭建到源码级原理

跨平台图形学前端 【免费下载链接】engine The Flutter engine 项目地址: https://gitcode.com/gh_mirrors/eng/engine 点击查看 免费下载 导读 dart_aot_runner 是 Flutter Engine 仓库(shell/platform/fuchsia/dart_runner/tests/startup_integratio…

📅 2026/9/28 11:11:47
黄白助手 第 064 个开关:启用显示真实未读数量的位置、验证方法与风险边界

黄白助手 第 064 个开关:启用显示真实未读数量的位置、验证方法与风险边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

📅 2026/9/28 11:11:47
从DNS解析原理到企业内网部署:一文搞定DNS配置与故障排查

从DNS解析原理到企业内网部署:一文搞定DNS配置与故障排查

1. 从一个让人抓狂的下午说起:DNS到底是怎么“导航”的先讲个真实场景。某天同事跑过来,说电脑能上微信、能看视频,但浏览器死活打不开网页,Chrome提示“无法找到DNS地址”。我第一反应是检查了下网卡配置,发现DNS服务…

📅 2026/9/28 11:11:47
MORE NEWS

更多资讯

📰

中文情感分析毕设实战:BiLSTM-CRF+Flask轻量部署方案

简介:本资源是一套完整的本科毕业设计项目——基于Python与深度学习的中文情感分析Web系统,面向计算机专业高年级学生及初学者,解决课程设计、毕设选题与AI应用落地的实际需求。系统采用Flask框架搭建前端交互界面,后端集成深度学…

📰

sqli-labs Less-3实战:从报错信息反推闭合方式与联合注入

打sqli-labs靶场,最容易被忽视的一件事是:每一关不是让你"把数据查出来就完事",而是训练你从反馈里读懂后台代码长什么样。我当初过Less-1和Less-2的时候还算顺利,到Less-3直接懵了——同样是加一个单引号,L…

📰

PyTorch入门实战:从理论到代码,用CNN实现手写数字识别

从非常粗略的认知角度来说,很多自学深度学习的人,在听课时觉得自己已经明白了:神经网络是什么、反向传播怎么算梯度、卷积核为什么有效。但真正坐到电脑前,面对一个空白的.py文件时,却不知道第一行代码该写什么。这是深…

📰

Flutter for OpenHarmony实战:免费游戏列表模块从0到1

最近在做一个 Flutter for OpenHarmony 的实战项目,目标是用一套 Flutter 代码跑通 OpenHarmony 和 Android 双端。项目暂定名是“万能游戏库App”,第一个要落地的核心模块就是免费游戏列表。这一篇我直接把手上的实现方案、源码思路和这阵子踩过的坑一次…

📰

深度学习实战:从环境配置到图像分类模型训练与评估

如果你已经看到第八讲,说明深度学习基础部分的坑你基本蹚过了一遍。这一讲开始,课程重心会从公式推导切换到代码实战,核心解决三个问题:本机环境怎么一次配好、一个图像分类模型怎么从零训练到能看指标、拿到数据集以后判断模型好…

📰

AD5755驱动开发实战:SPI时序、寄存器配置与工业DAC校准

简介:本资源是一份面向嵌入式开发工程师与STM32初学者的AD5755高精度DAC驱动代码包,聚焦工业控制、测试测量等需精确电压输出的应用场景。资源提供经实际验证的STM32平台适配驱动,解决外设通信协议实现、寄存器配置及电压输出控制等核心问题。…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬