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

Humanizer 流畅日期 API 实战:In.Five 类与“从现在起 5 个时间单位“的声明式时间表达

发布时间:2026/9/27 21:23:54 来源:云帆数科 栏目:资讯中心
Humanizer 流畅日期 API 实战:In.Five 类与“从现在起 5 个时间单位“的声明式时间表达
开发工具【免费下载链接】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 的 FluentDate 模块提供了一套可读性极高的声明式日期 API其中In.Five类专门用于表达从现在起或从指定时刻起5 秒/分钟/小时/天/周/月/年这类时间偏移。本文以website/versioned_docs/version-2.14.1/api/Humanizer.In.Five.md文档为主体结合 In.SomeTimeFrom.cs 源码与 InTests.cs 测试完整讲解该类的 7 个属性、7 个方法与底层生成机制读者读完后可以直接在 .NET 项目中用它写出In.Five.Minutes这样接近自然语言的时间代码。一、In.Five 类速览API 签名与定位In.Five是嵌套在Humanizer.In类内部的public static class位于Humanizer命名空间属于 FluentDate 功能族。从 API 文档看它的继承关系为System.Object → Five类型定义如下namespace Humanizer; public partial class In { public static class Five { // 7 个属性 7 个方法 } }在 In.SomeTimeFrom.cs 中可以看到In.Five共暴露 14 个成员分为两类属性7 个基于DateTime.UtcNow计算从现在起的偏移每次访问时实时取值方法7 个接收一个System.DateTime date参数返回从该日期起的偏移不依赖当前时刻具备确定性。这个类没有实例成员、没有构造函数使用方式永远是静态访问In.Five.Seconds或In.Five.DaysFrom(date)。二、属性详解从现在起 5 个时间单位文档列出的 7 个属性均返回System.DateTime语义与实现如下表属性文档语义源码实现In.SomeTimeFrom.csSeconds5 seconds from nowDateTime.UtcNow.AddSeconds(5)Minutes5 minutes from nowDateTime.UtcNow.AddMinutes(5)Hours5 hours from nowDateTime.UtcNow.AddHours(5)Days5 days from nowDateTime.UtcNow.AddDays(5)Weeks5 weeks from nowDateTime.UtcNow.AddDays(35)Months5 months from nowDateTime.UtcNow.AddMonths(5)Years5 years from nowDateTime.UtcNow.AddYears(5)使用示例using Humanizer; // 从现在起 5 分钟后的时刻 DateTime deadline In.Five.Minutes; // 从现在起 5 天后的时刻常用于缓存过期时间 DateTime cacheExpiry In.Five.Days;三个值得注意的实现细节基准是 UTC所有属性都基于DateTime.UtcNow而非DateTime.Now返回的是 UTC 时刻。如果需要本地时间展示应自行调用.ToLocalTime()。Weeks本质是天数加法In.Five.Weeks实现为DateTime.UtcNow.AddDays(35)即固定按 7 天/周换算不存在跨月/跨年周数的歧义。属性是实时计算的表达式体属性每次访问都会重新读取UtcNow因此多次连续访问In.Five.Seconds会得到略有差异的结果。若要求一次计算内保持一致应把结果赋给局部变量。三、方法详解从指定日期起 5 个时间单位7 个方法均接收System.DateTime date参数并返回System.DateTime语义是从提供的日期偏移 5 个单位实现全部基于DateTime.AddXxxpublic static DateTime SecondsFrom(DateTime date) date.AddSeconds(5); public static DateTime MinutesFrom(DateTime date) date.AddMinutes(5); public static DateTime HoursFrom(DateTime date) date.AddHours(5); public static DateTime DaysFrom(DateTime date) date.AddDays(5); public static DateTime WeeksFrom(DateTime date) date.AddDays(35); // 5 周 35 天 public static DateTime MonthsFrom(DateTime date) date.AddMonths(5); public static DateTime YearsFrom(DateTime date) date.AddYears(5);典型用法——把5 天宽限期叠加到任意基准日期上using Humanizer; DateTime dueDate new(2026, 10, 1); DateTime graceDeadline In.Five.DaysFrom(dueDate); // 2026-10-06与属性版本相比XxxFrom方法具备纯函数特性相同输入永远得到相同输出不依赖系统时钟因此更适合在单元测试、批处理和需要可复现结果的场景中使用。测试代码 InTests.cs 正是这样验证的[Fact] public void InFiveDays() { var baseDate On.January.The21st; var date In.Five.DaysFrom(baseDate); Assert.Equal(baseDate.AddDays(5), date); }该测试同时展示了 FluentDate 的组合用法先用On.January.The21st声明一个基准日期再用In.Five.DaysFrom在其上叠加偏移最终断言结果等价于baseDate.AddDays(5)。四、DateOnly 变体InDate.Five 与 .NET 6 场景针对仅需要日期、不需要时刻的场景Humanizer 在#if NET6_0_OR_GREATER条件下提供了InDate平行类型。文档对应的 InDate.SomeTimeFrom.cs 中同样存在InDate.Five但它返回的是System.DateOnlyInDate.Five.Day→DateOnly.FromDateTime(DateTime.UtcNow.AddDays(5))InDate.Five.DayFrom(DateOnly date)→date.AddDays(5)InDate.Five.DayFrom(DateTime date)→DateOnly.FromDateTime(date.AddDays(5))从源码结构看InDate.Five为DayFrom提供了两个重载DateOnly与DateTime入参方便从两种类型的基准日期出发计算Week、Month等成员同样遵循DateOnly语义。对应测试见 InDateTests.cs。选择建议只关心哪一天时用InDate需要精确时刻时用In。五、源码级原理T4 模板批量生成 One 到 TenIn.Five并非手工编写而是由 T4 文本模板生成。模板文件 In.SomeTimeFrom.tt 的核心循环如下#for (var i 1; i 10; i){ var plural i 1 ? s : ; ... public static class # i.ToWords().Dehumanize() # { public static DateTime # second # DateTime.UtcNow.AddSeconds(# i #); ... } #}#关键机制可以推断为循环变量i从 1 迭代到 10一次生成One到Ten共 10 个嵌套静态类类名通过i.ToWords().Dehumanize()生成——先调用 Humanizer 自身的数字转单词能力得到five再反人化得到Five类名与文档 API 完全对应单复数规则由i 1 ? s : 控制所以In.One中是Second/Minute/Hour/Day/Week/Month/Year单数In.Five及以后是Seconds/Minutes/Hours/Days/Weeks/Months/Years复数这也解释了为什么In.Five.Days使用复数命名Weeks统一展开为AddDays(i * 7)而秒/分/时/天/月/年直接使用对应的AddXxx(i)。In本身是一个partial class月份相关成员由 In.Months.tt 生成In.January、In.JanuaryOf(year)等TheYear方法定义在 In.cs 中而One到Ten由 In.SomeTimeFrom.tt 生成三者共同拼成完整的 FluentDate 入口。六、实战场景与注意事项推荐使用场景超时与过期时间var timeout In.Five.Minutes;比DateTime.UtcNow.AddMinutes(5)语义更直观缓存 TTLcache.Set(key, value, In.Five.Days - DateTime.UtcNow)这类相对当前时刻的偏移计算调度与宽限期In.Five.WeeksFrom(billingDate)表达账单日后 5 周可读性优先的领域代码在领域事件、提醒规则中In.Five.HoursFrom(createdAt)比裸的AddHours(5)更贴近业务语言。注意事项UTC 语义In.Five.Xxx基于UtcNow需要本地时间时显式转换跨时区系统请勿混用。属性实时求值连续访问属性会得到不同时刻需要一致基准时先缓存到变量或用XxxFrom(DateTime.UtcNow)等价形式。闰月与月末AddMonths(5)/AddYears(5)遵循 .NET 的月份/年份推进规则如 8 月 31 日加 1 个月得到 9 月 30 日Weeks则固定 7 天/周。版本与目标框架InDate.FiveDateOnly变体仅在NET6_0_OR_GREATER下编译旧框架项目应使用In.Five的DateTime版本。综上In.Five是 Humanizer FluentDate 中数字 → 时间偏移的典型代表API 文档负责定义契约T4 模板保证 One 到 Ten 的一致性生成测试用例则锁定了DaysFrom的确定性行为。掌握它的属性/方法二元结构后你可以无障碍地迁移到In.One、In.Three、In.Ten等其他数字类并用同样的思路使用InDate.Five处理纯日期场景。赞分享开发工具【免费下载链接】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 全解析In.Five 类与从现在起 5 个时间单位的 DateTime 计算Humanizer 流式日期 API 全解析In.Five 类与从现在起 5 个时间单位的 DateTime 计算 本文以 Humanizer 2.10.开发工具Humanizer 的 In.Nine 类用 Fluent API 表达从现在起 9 个时间单位之后的日期Humanizer 的 In.Nine 类用 Fluent API 表达从现在起 9 个时间单位之后的日期 In.Nine 是 Humanizer Flu开发工具Humanizer In.One 类详解用 FluentDate 相对时间 API 精确表达从现在起 1 个时间单位Humanizer In.One 类详解用 FluentDate 相对时间 API 精确表达从现在起 1 个时间单位 在 .NET 的日期计算场景中直接开发工具上一篇SQL Lineage元数据集成连接数据库获取完整血缘信息下一篇iptvnator 精准原生播放诊断设计如何让HTTP 404不再被误报成不支持的编码创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

在后台怎么做网站内链实战案例
在后台怎么做网站内链实战案例

5步搞定后台内链搭建,附速查手册避坑指南 模板网站太丑且功能僵化,改个链接还得找开发,这痛点谁懂?很多老板为了省事,花大几千买了个现成模板,结果上线才发现,想调整页面间的跳转逻辑,后台根本找不到入口,或者操作复杂得像在解微积分。这时候,手里… · 2026/9/27 21:23:47

Ubuntu 20.04 Java 开发环境搭建与 JNI 调用:TaoToken 统一 Key 配置实战
Ubuntu 20.04 Java 开发环境搭建与 JNI 调用: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/9/27 21:23:47

基于 Geo 特性的保险人可用内容选题 20 例
基于 Geo 特性的保险人可用内容选题 20 例

1. 引言Geo(地理信息)特性为保险行业提供了全新的内容创作视角。无论是车险、家财险、农业险还是健康险,地理位置、气候环境、区域风险等因素都可以成为保险人输出专业内容、触达用户的切入点。以下结合 Geo 特性,为保险人整理 20… · 2026/9/27 21:23:35

我们可能不再需要手写配置文件了~TaoToken 统一 Key 接入 Cline 实战
我们可能不再需要手写配置文件了~TaoToken 统一 Key 接入 Cline 实战

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

I-RAVEN-X 基准测试实战:用 TaoToken 统一 Key 跑通类比与数学推理的泛化鲁棒性评测
I-RAVEN-X 基准测试实战:用 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/9/27 22:04:36

openClaw 安全配置实战:从 Gateway 到沙箱模式,一份可落地的 config.toml 骨架
openClaw 安全配置实战:从 Gateway 到沙箱模式,一份可落地的 config.toml 骨架

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

【5天实战】从零构建AI-Native组织:飞书+Bot+Gitee全链路自动化实战指南——Day 3:Gitee和TRAE集成
【5天实战】从零构建AI-Native组织:飞书+Bot+Gitee全链路自动化实战指南——Day 3:Gitee和TRAE集成

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

历史事件视频怎么做?从老报纸检索到自动成片的完整流程拆解
历史事件视频怎么做?从老报纸检索到自动成片的完整流程拆解

做历史事件视频,最耗时的往往不是写稿,而是找画面。老报纸、旧档案、历史影像分散在各地,手动检索、下载、对齐,一条10分钟的视频光素材环节就能耗掉两三个下午。现在的AI素材匹配能力,已经可以把文稿语义直接对应到实… · 2026/9/27 22:04:36

Claude Code 工程化实战第 7 讲:可写型子代理的 permission 与 Edit/Write 配置骨架
Claude Code 工程化实战第 7 讲:可写型子代理的 permission 与 Edit/Write 配置骨架

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

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

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

企业微信二维码