首页/新闻资讯/正文详情

Humanizer OnDate.December 流畅日期 API 完全指南:用 C 优雅构造当年 12 月的每一天

发布时间:2026/9/25 2:44:51 来源:云帆数科 栏目:资讯中心
Humanizer OnDate.December 流畅日期 API 完全指南:用 C 优雅构造当年 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点击查看免费下载导读OnDate.December是 Humanizer 流畅日期FluentDate体系中专为 12 月设计的静态访问器集合用于以自然语言般的The1st…The31st属性与The(dayNumber)方法直接构造「当前年份」12 月任意一天的DateOnly值。本文以 Humanizer.OnDate.December.md 的 API 参考为骨架结合 OnDate.Days.cs 源码与 OnDateTests.cs 测试完整列出全部 31 个成员、签名与行为边界并给出可直接编译运行的实战示例——读完你即可在自己的 .NET 6 项目中无歧义地写出「今年 12 月 25 日」这类日期表达式同时理解它为何不能被随意用于确定性代码。OnDate.December 是什么FluentDate 体系中的 12 月访问器类定义与继承关系OnDate.December是一个public静态嵌套类位于Humanizer命名空间下public class OnDate.December继承关系System.Object→OnDate.December没有任何额外基类它是外部类OnDate的嵌套类型OnDate本身封装了一组与月份一一对应的嵌套类JanuaryDecember每个月份类都提供同一套「第 N 天」访问模式与 Humanizer.OnDate.md 中描述的OnDate类配套使用源码位于 OnDate.Days.cs文件顶部以#if NET6_0_OR_GREATER条件编译因此OnDate家族只在 .NET 6 及更高目标框架上可用因为其返回值是System.DateOnly该类型自 .NET 6 起引入。与 On.December 的区别DateOnly vs DateTimeFluentDate 体系存在两套平行的月份访问器返回值类型不同外部类嵌套月份类成员返回类型文件OnDateOnDate.DecemberSystem.DateOnlyOnDate.Days.csOnOn.DecemberSystem.DateTimeOn.Days.cs两者的成员名、语义完全一致只是返回类型不同OnDate.December.The25th返回DateOnly纯日期、无时间分量而On.December.The25th返回DateTime午夜零点。在 .NET 6 上需要纯日期场景如生日、截止日、报表维度时优先使用OnDate版本。成员设计Ordinal 命名风格成员命名采用英文序数词的省略形式The1st、The2nd、The3rd、The4th……这使调用点读起来像一句自然语言OnDate.December.The25th直译即「十二月二十五日」可读性远高于new DateOnly(year, 12, 25)。从源码看这正是 Humanizer「Humanize」设计哲学的体现——让日期构造也具备可读性。全部成员清单31 个静态属性与 1 个静态方法根据关联文档与源码OnDate.Days.csOnDate.December共公开31 个静态属性The1stThe31st 1 个静态方法 The(int)全部返回System.DateOnly全部是「当年 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 日每个属性均以 get-only 静态属性形式提供签名统一为public static System.DateOnly The10th { get; }参数化方法The(int)用于按数字动态构造日期覆盖固定属性无法表达的全部场景例如从业务数据读到的日号public static System.DateOnly The(int dayNumber);项说明参数dayNumberSystem.Int32表示 12 月中的日号合法范围 131返回值System.DateOnly即当年 12 月dayNumber日的日期边界行为传入超出当月合法范围的值如The(0)、The(32)会抛出ArgumentOutOfRangeException因为底层DateOnly构造函数会对「不存在的月/日组合」抛异常场景文档 fluent-dates-and-time-spans.mdx 明确提示不可能的月/日组合构造函数会 throw注意12 月固定为 31 天不存在 2 月 29 日式的闰年歧义因此所有属性在任意年份都安全可用。源码实现原理一行表达式背后的机制底层实现OnDate.December的全部成员都基于同一个朴素表达式实现没有任何缓存、格式化或区域文化参与public static DateOnly The(int dayNumber) new(DateTime.Now.Year, 12, dayNumber); public static DateOnly The25th new(DateTime.Now.Year, 12, 25);即读取DateTime.Now.Year拿到当前系统时间所在年份以new DateOnly(年份, 12, 日号)构造纯日期。因此可以明确两点事实年份永远来自DateTime.Now而非DateTime.UtcNow也不是可注入的起始日期——这是设计上的取舍属性是惰性求值的 get-only 属性每次访问都会重新读取当前年份。在同一年的不同时刻调用结果一致跨年后调用则自动得到新一年的 12 月对应日期。生成方式T4 模板该文件并非手写而是由 OnDate.Days.tt 这个 T4 文本模板生成。模板头部以2012作为闰年参考常量、循环 12 个月逐月生成每个月份的 31 个属性OnDate.Days.tt。这解释了为什么 12 个月份类的成员结构完全对称——它们来自同一套模板驱动可维护性集中在模板而不是 2300 余行生成代码上。仓库中同族的 T4 还包括 In.Months.tt、On.Days.tt 等构成完整的 FluentDate 生成体系。测试印证OnDateTests.cs 用 xUnit 验证了 December 成员的确定性行为[Fact] public void OnDecemberThe4th() Assert.Equal(new(DateTime.Now.Year, 12, 4), OnDate.December.The4th);测试断言OnDate.December.The4th恒等于new DateOnly(DateTime.Now.Year, 12, 4)直接印证「年份取自 Now、月份固定 12、日号固定 4」的实现事实。实战用法可复制到 .NET 6 项目的完整示例基础用法using Humanizer; // 当年 12 月 25 日圣诞节返回 DateOnly DateOnly christmas OnDate.December.The25th; // 当年 12 月 31 日跨年夜 DateOnly newYearsEve OnDate.December.The31st; // 动态日号从业务变量构造 int day GetDayFromBusinessData(); // 例如 18 DateOnly day18 OnDate.December.The(day); // 打印结果如 2026-12-25 Console.WriteLine(christmas.ToString(yyyy-MM-dd));组合运用配合 Humanizer 其他扩展OnDate返回的DateOnly可以无缝衔接 Humanizer 的日期人性化扩展构造「距今多久」的可读描述using Humanizer; using Humanizer.Localisation; // 当年 12 月 31 日相对今天的描述取决于运行时日期 DateOnly deadline OnDate.December.The31st; string when deadline.Humanize(); // 例如 2 days from now // 也可以先转 DateTime 再交给 DateTime 版本扩展 DateTime d On.December.The31st; // 注意 On 返回 DateTime午夜 0 点与确定性代码的冲突重要陷阱场景文档 fluent-dates-and-time-spans.mdx 明确警告不带From或Of(year)后缀的属性会读取DateTime.Now或UtcNow应避免在确定性代码中使用。具体到OnDate.December测试中用「当年」断言之所以成立是因为测试断言右侧同样使用DateTime.Now.Year两侧在同一年内求值一致若你的业务逻辑需要固定年份如报表固定统计 2025 年 12 月直接使用OnDate.December.The31st会让结果随运行年份漂移此时应改用显式构造// 确定性写法显式指定年份 var fixedDate new DateOnly(2025, 12, 31); // 或者先拿 OnDate 结果再通过 In 系列重定位年份 DateOnly moved InDate.December.Of(2025); // 若需要年份重定位能力参见 InDate 系列原则总结OnDate.December适合「今天所在的年份」这类语义明确的场景日历 UI、当年活动排期跨年不变的硬编码日期请使用显式DateOnly构造保证测试与业务可重复。与其他 FluentDate 访问器的对照与选型OnDate.December只是 FluentDate 大体系的一角选型时请对照下表访问器家族返回类型典型成员适用场景OnDate.Month.TheNthDateOnlyOnDate.December.The25th当年某月某日的纯日期本主题On.Month.TheNthDateTimeOn.December.The25th当年某月某日的午夜时间点InDate.Month.Of(年)DateOnlyInDate.December.Of(2025)指定年份的某月日期可重定位年份In.Month.Of(年)DateTimeIn.December.Of(2025)指定年份某月日期的时间点版本In.Two.MonthsFrom(起始)DateOnly/DateTimeIn.Two.MonthsFrom(start)日历月运算AddMonths语义月份与年份的From/Of变体本质上是DateTime.AddMonths/AddYears的日历级运算见 fluent-dates-and-time-spans.mdx它们不做文化区域历法选择也没有TimeSpan式的估算误差而OnDate系列则是最朴素的「今年 N 月 N 日」构造器。从源码结构看所有月份类共享同一套模板生成行为完全对称掌握 12 月即可类推其余 11 个月。版本与可用性说明OnDateDateOnly版流畅日期自2.11.10起在兼容目标框架上提供见 fluent-dates-and-time-spans.mdx 的版本说明本文关联文档即来自version-2.11.10文档集源码层面OnDate家族以#if NET6_0_OR_GREATER条件编译仅在 .NET 6 目标框架可见.NET Framework / .NET Core 3.1 等旧目标请使用OnDateTime版使用前请确认项目TargetFramework至少为net6.0并引用 Humanizer 2.11.10 或更高版本的程序集Humanizer命名空间无需额外配置即可直接using Humanizer;调用。结语OnDate.December用 32 个精心命名的静态成员把「今年 12 月的某一天」这一高频业务表达压缩成一行自然语言式代码The1st到The31st覆盖全部日号The(int)处理动态日号底层统一由new DateOnly(DateTime.Now.Year, 12, dayNumber)支撑。理解其「年份取自DateTime.Now、惰性求值、T4 生成、仅限 .NET 6」四条实现事实你就能在日历应用、活动排期等场景中安全使用它并在需要固定年份时果断转向显式DateOnly构造或InDate系列——这正是 FluentDate 设计留给开发者的选择边界。延伸阅读OnDate API 总览 | On 类DateTime 版 12 月访问器 | FluentDate 场景指南 | OnDate 源码含全部月份类 | T4 生成模板赞分享开发工具【免费下载链接】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开发工具CAMEL OpenAICompatibleModel 详解统一接入任意 OpenAI 兼容模型后端的通用模型后端CAMEL OpenAICompatibleModel 详解统一接入任意 OpenAI 兼容模型后端的通用模型后端 本文基于 CAMEL 仓库中 OpenAI开发工具ChatGPT for Google浏览器扩展的插件系统设计终极指南如何构建模块化AI搜索助手ChatGPT for Google浏览器扩展的插件系统设计终极指南如何构建模块化AI搜索助手 ChatGPT for Google是一款创新的浏览器扩展插件开发工具上一篇Omost日志分析工具通过运行日志优化生成参数的实用技巧下一篇gpt-ai-assistant内存优化大型对话的History分页处理全解析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

为什么选择is-png-cj判断PNG?3行代码用文件内容而非扩展名识别图片的仓颉库
为什么选择is-png-cj判断PNG?3行代码用文件内容而非扩展名识别图片的仓颉库

为什么选择is-png-cj判断PNG?3行代码用文件内容而非扩展名识别图片的仓颉库 【免费下载链接】is-png-cj 一个判断图片格式的库,根据图片的文件数据,判断图片是否为png格式 项目地址: https://gitcode.com/Cangjie-TPC/is-png-cj 在图片… · 2026/9/25 2:44:39

手把手搭建可调试PMSM FOC仿真模型
手把手搭建可调试PMSM FOC仿真模型

/* 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:44:32

使用 KenLM 在 PaddleSpeech 中训练中文 N-gram 语言模型:从字符/词级建模到 ASR 解码集成
使用 KenLM 在 PaddleSpeech 中训练中文 N-gram 语言模型:从字符/词级建模到 ASR 解码集成

人工智能语音音频 【免费下载链接】PaddleSpeech Easy-to-use Speech Toolkit including Self-Supervised Learning model, SOTA/Streaming ASR with punctuation, Streaming TTS with text frontend, Speaker Verification System, End-to-End Speech Translation and Keyword… · 2026/9/25 2:44:32

PostgreSQL参数查询全指南:从SHOW到pg_settings的完整链路
PostgreSQL参数查询全指南:从SHOW到pg_settings的完整链路

做了这么多年 PostgreSQL 运维和开发,几乎每隔一阵就有人问我同一个问题:到底去哪查数据库当前的参数值?初看这个问题很简单,SHOW work_mem;一行命令就能解决。但当我真去写自动化巡检、或者做一次参数调整前的梳理时,… · 2026/9/25 3:17:13

LibreSprite 的 gen 代码生成器:把 XML 接口与配置定义变成可编译检查的 C++ 静态结构
LibreSprite 的 gen 代码生成器:把 XML 接口与配置定义变成可编译检查的 C++ 静态结构

桌面应用游戏开发图形学 【免费下载链接】LibreSprite Animated sprite editor & pixel art tool -- Fork of the last GPLv2 commit of Aseprite 项目地址: https://gitcode.com/gh_mirrors/li/LibreSprite 点击查看 免费下载 本文基于仓库中 src/gen/README.… · 2026/9/25 3:17:13

Apache Beam 代码修改实战指南:从 Gradle 构建体系到本地测试与产物发布
Apache Beam 代码修改实战指南:从 Gradle 构建体系到本地测试与产物发布

大数据批处理流处理数据工程 【免费下载链接】beam Apache Beam is a unified programming model for Batch and Streaming data processing. 项目地址: https://gitcode.com/gh_mirrors/beam4/beam 点击查看 免费下载 本文基于 Apache Beam 仓库的官方贡献文档 co… · 2026/9/25 3:17:07

ServerPackCreator API 使用指南:如何集成到你的 Java/Kotlin 项目
ServerPackCreator API 使用指南:如何集成到你的 Java/Kotlin 项目

ServerPackCreator API 使用指南:如何集成到你的 Java/Kotlin 项目 【免费下载链接】ServerPackCreator Create a server pack from a Minecraft Forge, NeoForge, Fabric, LegacyFabric or Quilt modpack! 项目地址: https://gitcode.com/gh_mirrors/se/ServerPa… · 2026/9/25 3:17:07

重学 Java 设计模式:实战模板模式「模拟爬虫各类电商商品,生成营销推广海报场景」
重学 Java 设计模式:实战模板模式「模拟爬虫各类电商商品,生成营销推广海报场景」

文档教程后端 【免费下载链接】CodeGuide :books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总,旨在为大家提供一个清晰详细的学习教程,侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助,请给予支持(关注、… · 2026/9/25 3:17:01

SSDB 的存储基石:LevelDB SSTable 文件格式全解析
SSDB 的存储基石:LevelDB SSTable 文件格式全解析

数据库KV存储数据存储 【免费下载链接】ssdb SSDB - A fast NoSQL database, an alternative to Redis 项目地址: https://gitcode.com/gh_mirrors/ss/ssdb 点击查看 免费下载 SSDB 是构建在 LevelDB 之上的 NoSQL 数据库,其磁盘持久化能力完全依赖 Lev… · 2026/9/25 3:16:54

数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)
数值优化(Numerical Optimization)学习系列-03-共轭梯度方法(Conjugate Gradient)

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

创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战
创维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
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

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码