Humanizer 流畅日期 API 解析:`InDate.One` 类的 1 天/周/月/年计算全指南
开发工具【免费下载链接】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.InDate.One是 Humanizer 流畅日期Fluent DateAPI 中面向DateOnly的静态嵌套类用于以自然语言般简洁的语法计算从现在起 1 天/周/月/年以及从指定日期起 1 天/周/月/年的日期值。阅读本文后你将掌握该类全部 4 个属性与 8 个方法的重载签名、返回值语义、UTC 基准时间的行为细节以及它在源码生成T4 模板与测试体系中的实现与验证方式可直接套用到自己的 .NET 6 业务代码中。一、InDate.One是什么类定义与位置InDate.One是InDate这个partial类内部的public static class其完整声明为public static class InDate.One它的实现位于 src/Humanizer/FluentDate/InDate.SomeTimeFrom.cs并且整个文件都被#if NET6_0_OR_GREATER条件编译指令包裹。这是因为该类所有属性与方法都返回System.DateOnly——而DateOnly是 .NET 6 才引入的类型。因此目标框架为.NET 6 及以上含 .NET 7/8/9/10 等时InDate.One可用面向 .NET Framework 或 .NET 5 及以下时该类不会被编译进程序集。从类继承关系看InDate.One直接继承自System.Object没有基类成员可继承所有成员均为public static调用时不需要实例化直接写InDate.One.Day或InDate.One.DayFrom(...)即可。InDate本身还承担其他职责月份快捷入口如InDate.January、InDate.JanuaryOf(2025)定义在 src/Humanizer/FluentDate/InDate.Months.cs指定年份的 1 月 1 日入口InDate.TheYear(int year)定义在 src/Humanizer/FluentDate/InDate.cs。三者共同拼出完整的InDate类。二、4 个从现在起属性Day/Week/Month/YearInDate.One提供 4 个只读静态属性全部以UTC 当前时间DateTime.UtcNow为基准计算从现在起 1 个时间单位的DateOnly属性文档描述实际计算源码 InDate.SomeTimeFrom.csDay1 days from nowDateOnly.FromDateTime(DateTime.UtcNow.AddDays(1))Week1 weeks from nowDateOnly.FromDateTime(DateTime.UtcNow.AddDays(7))Month1 months from nowDateOnly.FromDateTime(DateTime.UtcNow.AddMonths(1))Year1 years from nowDateOnly.FromDateTime(DateTime.UtcNow.AddYears(1))声明形式统一为public static System.DateOnly Day { get; } public static System.DateOnly Week { get; } public static System.DateOnly Month { get; } public static System.DateOnly Year { get; }几个值得注意的实现细节属性名是单数。One这个类专门表示数量为 1所以成员名使用单数Day/Week/Month/Year而Two到Ten类则对应复数形式Days/Weeks/Months/Years见同文件中的Two、Five、Ten等类。基准是 UTC 而非本地时间。所有from now属性都读取DateTime.UtcNow再通过DateOnly.FromDateTime截取日期部分。这意味着在 UTC8 等时区环境下结果可能与本地日期加一天相差一天跨时区部署时需特别注意。周 7 天。Week的实现是AddDays(7)本质是固定的 7×24 小时跨度与日历周概念无关。实操示例using Humanizer; // 假设当前 UTC 时间为 2025-01-20 15:30:00 DateOnly tomorrow InDate.One.Day; // 2025-01-21 DateOnly nextWeek InDate.One.Week; // 2025-01-27 DateOnly nextMonth InDate.One.Month; // 2025-02-20 DateOnly nextYear InDate.One.Year; // 2026-01-20三、8 个从指定日期起方法四种单位 × 两种重载除了基于现在的属性外InDate.One还提供 8 个方法允许开发者注入基准日期来计算距离该日期 1 个时间单位的结果。每种时间单位都有两个重载方法输入参数类型实现逻辑DayFrom(DateOnly date)System.DateOnlydate.AddDays(1)DayFrom(DateTime date)System.DateTimeDateOnly.FromDateTime(date.AddDays(1))WeekFrom(DateOnly date)System.DateOnlydate.AddDays(7)WeekFrom(DateTime date)System.DateTimeDateOnly.FromDateTime(date.AddDays(7))MonthFrom(DateOnly date)System.DateOnlydate.AddMonths(1)MonthFrom(DateTime date)System.DateTimeDateOnly.FromDateTime(date.AddMonths(1))YearFrom(DateOnly date)System.DateOnlydate.AddYears(1)YearFrom(DateTime date)System.DateTimeDateOnly.FromDateTime(date.AddYears(1))所有方法的返回值都是System.DateOnly——即使传入的是DateTime也会被转成DateOnly丢弃时间部分。这一点与In类不同In类src/Humanizer/FluentDate/In.cs面向DateTime返回的也是DateTimeInDate系列则是它的DateOnly等价物。实操示例using Humanizer; var baseDate new DateOnly(2025, 1, 20); var appointment InDate.One.MonthFrom(baseDate); // 2025-02-20 var baseDateTime new DateTime(2025, 1, 20, 9, 0, 0); var nextWeek InDate.One.WeekFrom(baseDateTime); // 2025-01-27时间部分被丢弃四、日历算术与时长算术的本质区别InDate.One的四个单位背后是两种截然不同的日期运算模型理解这一点对正确使用至关重要天与周是时长运算AddDays(1)、AddDays(7)是固定天数的线性累加一天恒为 24 小时结果确定无歧义。月与年是日历运算AddMonths(1)、AddYears(1)委托给DateOnly或DateTime的内置方法按日历月/年的实际长度推进。其副作用是溢出归一化例如从 2 月 29 日加 1 年若目标年份不是闰年结果会归一化为 2 月 28 日而不是抛出异常。Humanizer 官方场景文档 website/docs/scenarios/fluent-dates-and-time-spans.mdx 对此有明确说明月/年形式委托给AddMonths/AddYears属于日历粒度运算而非估算的TimeSpan同时它不会选择特定文化的Calendar。另外同文档特别提醒不带From后缀的属性即InDate.One.Day这类会读取DateTime.Now或UtcNow在确定性代码如测试、批处理中应避免使用而MonthFrom/YearFrom继承的归一化行为则让这类方法适合需要可重复结果的场景——只要注入固定基准日期。五、源码生成机制T4 模板如何产出One到TenInDate.One并非手写代码而是由 T4 文本模板 src/Humanizer/FluentDate/InDate.SomeTimeFrom.tt 在编译期生成。模板的核心是一个for循环i 1 .. 10# for (var i 1; i 10; i){ var plural i 1 ? s : ; var day Day plural; // i1 时为 Dayi1 时为 Days ... # public static class # i.ToWords().Dehumanize() # ...生成规则非常精巧类名由数字转词再转回驼峰i.ToWords().Dehumanize()先把整数1变成英文单词one再用 Humanizer 自己的Dehumanize扩展转成One——循环一次即得到One、Two……Ten共 10 个嵌套类成员名按单复数切换i 1时生成单数Day/Week/Month/Yeari 1时生成复数Days/Weeks/Months/Years周按i * 7天展开Week/Weeks实际是AddDays(i * 7)所以InDate.One.Week等价于InDate.Seven.Days。这套生成机制解释了为什么 API 文档中InDate.One.Day与InDate.Two.Days结构完全对称——它们来自同一个模板循环。同理面向DateTime的In.SomeTimeFrom.cs及其.tt模板src/Humanizer/FluentDate/In.SomeTimeFrom.tt也遵循完全相同的生成模式。六、测试验证InDate.One的行为如何被确认Humanizer 为InDate系列提供专项测试见 tests/Humanizer.Tests/FluentDate/InDateTests.cs。其中对若干天后行为的典型验证方式是把基准日期显式注入[Fact] public void InFiveDays() { var baseDate OnDate.January.The21st; var date InDate.Five.DaysFrom(baseDate); Assert.Equal(baseDate.AddDays(5), date); }测试中用OnDate.January.The21st构造固定基准日期再断言InDate.Five.DaysFrom(baseDate) baseDate.AddDays(5)。对InDate.One而言等价断言即为InDate.One.DayFrom(d) d.AddDays(1)。这种注入基准 对比原生 API 结果的写法正是官方推荐的测试模式也印证了From系列方法本质是原生AddDays/AddMonths/AddYears的薄封装。七、与周边 API 的配合In、InDate、OnDateInDate.One不是孤立的它嵌在 Humanizer 流畅日期体系中与以下入口配合使用效果最佳InDate APIInDate.January~InDate.December当年每月 1 日、InDate.JanuaryOf(2025)指定年份每月 1 日、InDate.TheYear(2025)指定年份 1 月 1 日全部返回DateOnlyIn APIIn.One.Day、In.Two.MonthsFrom(...)等返回DateTime适合需要保留时间部分的场景OnDate APIOnDate.January.The21st这类某月某日构造器可作为From系列方法的基准日期来源。官方示例 website/docs/_examples/scenarios-fluent-dates/Program.cs 展示了同类 API 的实际组合用法In.Two.MonthsFrom(startingPoint)以固定DateTime为基准计算两个月后的日期In.AprilOf(2025).AddDays(2).At(14, 30)则组合月份入口、天数偏移与时刻设定。这套模式同样适用于InDate.One——用InDate.One.MonthFrom(baseDate)替代手写baseDate.AddMonths(1)让业务代码读起来更接近自然语言。八、使用建议与注意事项小结框架前提InDate.One仅在 .NET 6 可用若需兼容旧框架请改用返回DateTime的In.One。属性 vs 方法属性Day/Week/Month/Year基于DateTime.UtcNow每次访问结果随时间变化仅适合交互式、非确定性的场景需要可重复结果时应使用From方法注入显式基准日期。时区敏感性UTC 基准意味着结果日期可能与本地日历直觉不一致跨时区系统务必换算确认。月/年溢出Month/Year及对应From方法遵循AddMonths/AddYears的归一化语义如 2 月 29 日 → 2 月 28 日不会抛异常需要严格月内同日时请评估该行为是否符合业务预期。命名习惯One类内全部为单数成员名从Two起变为复数编码时不要记混。InDate.One虽小却是理解 Humanizer 流畅日期体系生成式 API 日历语义 确定性注入三大设计思路的最佳切入点模板生成保证 1~10 的对称一致AddMonths/AddYears委托保证与 BCL 语义对齐From重载则把可测试性还给了调用方。赞分享开发工具【免费下载链接】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 详解使用 InDate.One 快速计算 1 天/周/月/年后的日期Humanizer 流式日期 API 详解使用 InDate.One 快速计算 1 天/周/月/年后的日期 导读 InDate.One 是 Humanizer开发工具Humanizer 的 InDate.One 类型详解用流畅 API 计算「一天/一周/一月/一年后」的日期Humanizer 的 InDate.One 类型详解用流畅 API 计算「一天/一周/一月/一年后」的日期 InDate.One 是 Humanizer 流开发工具Humanizer InDate.One 全解析基于 DateOnly 的1 天/周/月/年后流式日期 APIHumanizer InDate.One 全解析基于 DateOnly 的1 天/周/月/年后流式日期 API InDate.One 是 Humanize开发工具上一篇Zephyr RTOS 下 SAM D21 Xplained Prosamd21_xpro开发板使用指南硬件特性、引脚映射与烧录调试实战下一篇Flame 游戏引擎图片与精灵渲染全指南从资源加载、Sprite 到动画与自动批处理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

关于MCU启动的个人理解

关于MCU启动的个人理解

MCU启动流程ps:其中地址是假设值MCU白启动流程:1.上电电压升到阈值 → 释放复位信号(不是触发复位)。POR 上电阶段是保持复位有效按住 CPU;电压稳定后撤销复位,CPU 才开始干活。2.硬件采样 BOOT0 引脚电平&…

2026/10/2 15:50:10 阅读更多 →
为什么4步翻译链能拟人化AI文本?humanize-text Standard管线原理深度解析

为什么4步翻译链能拟人化AI文本?humanize-text Standard管线原理深度解析

为什么4步翻译链能拟人化AI文本?humanize-text Standard管线原理深度解析 【免费下载链接】humanize-text Open-source text humanization pipeline with every intermediate step published. Two LLM rewrites at temp 1.3, then two hops across different NMT en…

2026/10/2 15:50:06 阅读更多 →
Desloppify review实战:LLM主观评审如何用命名、抽象与模块边界给代码库打分

Desloppify review实战:LLM主观评审如何用命名、抽象与模块边界给代码库打分

Desloppify review实战:LLM主观评审如何用命名、抽象与模块边界给代码库打分 【免费下载链接】desloppify Agent harness to make your slop code well-engineered and beautiful. 项目地址: https://gitcode.com/gh_mirrors/de/desloppify Desloppify 是一款…

2026/10/1 2:42:01 阅读更多 →

最新新闻

大模型本地部署完全指南:从工具选型到推理优化与显存量化

大模型本地部署完全指南:从工具选型到推理优化与显存量化

2026年,本地部署大模型这件事,已经彻底从小圈子的技术玩具变成了很多团队绕不开的刚需。我为什么敢用“刚需”这个词?三个理由:第一是数据隐私,公司代码、客户信息、内部资料,很多人不敢往外传,…

2026/10/2 15:50:51 阅读更多 →
1200次智能体逃逸复盘:生产环境攻击路径与护栏清单

1200次智能体逃逸复盘:生产环境攻击路径与护栏清单

智能体逃逸这件事,圈子里聊了快两年,但真正让我意识到“事态严重”的,是最近一次复盘:1200 个实例在外网环境下成功攻破了生产环境的防护边界。你没看错,不是 12 个,不是 120 个,是 1200 个。这…

2026/10/2 15:50:51 阅读更多 →
AI热搜深度解读:从智能体训练到多AI协作的工程化实战

AI热搜深度解读:从智能体训练到多AI协作的工程化实战

今天的AI热搜榜上,有价值的信号其实非常密集:既有DeepSeek公开智能体训练新方法这样的硬核技术新闻,也有"AI Agent怎么扛并发"这种典型的工程化焦虑,还有AI短剧、AI视频画质修复、AI产品经理角色变化等贴近业务落地的词…

2026/10/2 15:50:51 阅读更多 →
孩子对CSP-J2、CSP-S2爆零经历有抵触情绪,怎么引导复盘

孩子对CSP-J2、CSP-S2爆零经历有抵触情绪,怎么引导复盘

引导抵触爆零复盘的孩子,核心是先完全接住情绪,再用游戏化的低压力方式绕开“翻旧账”的抵触点,全程不指责、不贴标签,把复盘变成孩子自己主动参与的“寻宝闯关”,完全不占用太多校内时间。 🧸 第一步&…

2026/10/2 15:50:51 阅读更多 →
CSP-J2、CSP-S2孩子爆零后如何制定孩子恢复信心的计划

CSP-J2、CSP-S2孩子爆零后如何制定孩子恢复信心的计划

CSP-J2、CSP-S2爆零后的信心恢复,不是"安慰两句"就能解决的,需要一份有节奏、可执行、不占校内时间的计划。下面这份计划按"情绪→掌控感→归因→状态→预期"五步走,全程单日不超过30分钟,你可以直接照着执行…

2026/10/2 15:50:51 阅读更多 →
AI智能体产品开发实战:从脚手架到护城河的工程化路径

AI智能体产品开发实战:从脚手架到护城河的工程化路径

1. 从 Grok Bot 一个月造出爆款说起:AI 智能体产品的演化逻辑1.1 一个月造出爆款,真正值得关注的不是速度Grok Bot 一个月做出爆款这件事,圈内人第一反应往往是“团队执行力强”或者“踩中了风口”。但如果你真正做过 AI 智能体产品&#xff…

2026/10/2 15:49:50 阅读更多 →

日新闻

从零搭建AI工程化:模型之外的完整闭环

从零搭建AI工程化:模型之外的完整闭环

先搞清楚一件事:从零开始做 AI 工程化,难的从来不是调模型、写提示词,而是把一套原型 Demo 变成长得像是“正经系统”的东西。你手里可能已经有了能跑通的代码,也可能刚读完一些概念,但真到了要把它变成可维护、可观测…

2026/10/2 0:00:20 阅读更多 →
大模型训练显存估计与混合精度训练实战指南

大模型训练显存估计与混合精度训练实战指南

1. 大模型训练显存估计与混合精度训练详解显存不够用,几乎是每个做大模型训练的人都会撞上的第一堵墙。你可能也经历过:模型代码写完了,数据管道跑通了,满心欢喜地按下训练启动脚本,结果几秒钟后终端弹出一行红字——C…

2026/10/2 0:00:20 阅读更多 →
小样本学习数据集选型指南:27个真正可用的高质量数据集

小样本学习数据集选型指南:27个真正可用的高质量数据集

1. 小样本学习的“弹药库”:为什么你总在找数据集,却总找不到真正能用的? 小样本、数据集——这两个词最近半年在我处理的200多个AI项目咨询里,出现频率排进前三。不是模型调不好,不是代码写不对,而是卡在…

2026/10/2 0:00:20 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/2 5:26:06 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/2 6:09:11 阅读更多 →