开发工具【免费下载链接】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点击查看免费下载In.Seven是 Humanizer FluentDate 系列 API 中负责7 个时间单位语义的静态嵌套类提供In.Seven.Days、In.Seven.Months这类属性以及In.Seven.DaysFrom(date)这类方法让开发者用近乎自然语言的语法表达相对日期计算。阅读本文后你将掌握该类的全部属性与方法签名、其基于 UTC 的实现细节、T4 模板生成机制以及如何结合测试用例验证结果从而在业务代码中安全地使用这类流式日期 API。In.Seven在 FluentDate API 中的定位Humanizer 的 FluentDate 命名空间围绕In、On两个静态类组织了一批可朗读的日期构造 API。其中In类承担两类职责详见 In.cs 与 In.SomeTimeFrom.cs月份工厂In.January、In.MarchOf(2025)等返回指定月份 1 号由 In.Months.tt 生成相对时间工厂In.OneIn.Ten十个嵌套静态类每个类都提供秒、分钟、小时、天、周、月、年七种单位的相对日期计算In.Seven即其中量词为 7的那一个。从 API 文档 Humanizer.In.Seven.md 的定义看In.Seven是一个public static class继承关系为System.Object → Seven。它没有构造函数与实例成员全部成员均为静态属性或静态方法因此可以直接以In.Seven.xxx形式调用无需实例化。属性成员从现在起 N 个时间单位In.Seven提供七个只读属性每个属性表示从当前时刻UTC起向后推移 7 个对应单位的DateTime。完整清单如下属性类型语义实现表达式SecondsDateTime7 秒后DateTime.UtcNow.AddSeconds(7)MinutesDateTime7 分钟后DateTime.UtcNow.AddMinutes(7)HoursDateTime7 小时后DateTime.UtcNow.AddHours(7)DaysDateTime7 天后DateTime.UtcNow.AddDays(7)WeeksDateTime7 周后49 天DateTime.UtcNow.AddDays(49)MonthsDateTime7 个月后DateTime.UtcNow.AddMonths(7)YearsDateTime7 年后DateTime.UtcNow.AddYears(7)这一结构与 In.SomeTimeFrom.cs 中Seven类的实现完全一致属性通过表达式主体expression-bodied直接返回DateTime.UtcNow的加法结果。值得注意的实现细节有两点基准是 UTC 而非本地时间。所有属性都基于DateTime.UtcNow计算这意味着在同一时刻、不同时区的机器上调用In.Seven.Days得到的是同一个 UTC 时间点而不是各机器本地时间各自加 7 天。如果你的业务需要本地时区的 7 天后需要自行转换In.Seven.Days.ToLocalTime()。每次访问都重新求值。由于属性是方法表达式In.Seven.Days在每次读取时都会重新计算DateTime.UtcNow。如果你先取一次、再取一次两次结果会相差若干毫秒而不是相差 7 天。需要固定基准时应先缓存一次调用结果例如var deadline In.Seven.Days; // 只读一次并缓存 Console.WriteLine($7 天后UTC{deadline:yyyy-MM-dd HH:mm:ss});方法成员从指定日期起 N 个时间单位In.Seven还提供七个同名 From后缀的静态方法用于以传入日期为基准的相对计算。它们全部接收一个System.DateTime参数date返回System.DateTime方法签名实现表达式SecondsFromstatic DateTime SecondsFrom(DateTime date)date.AddSeconds(7)MinutesFromstatic DateTime MinutesFrom(DateTime date)date.AddMinutes(7)HoursFromstatic DateTime HoursFrom(DateTime date)date.AddHours(7)DaysFromstatic DateTime DaysFrom(DateTime date)date.AddDays(7)WeeksFromstatic DateTime WeeksFrom(DateTime date)date.AddDays(49)MonthsFromstatic DateTime MonthsFrom(DateTime date)date.AddMonths(7)YearsFromstatic DateTime YearsFrom(DateTime date)date.AddYears(7)这些方法不依赖当前时刻结果完全由入参决定因此具有可预测性与可测试性。典型用法var start new DateTime(2025, 6, 1, 12, 0, 0, DateTimeKind.Utc); var inSevenMonths In.Seven.MonthsFrom(start); // 2026-01-01 12:00:00 UTC var inSevenWeeks In.Seven.WeeksFrom(start); // 2025-07-20 12:00:00 UTC测试代码 InTests.cs 也展示了这一模式先通过On.January.The21st构造基准日期再调用In.Five.DaysFrom(baseDate)并断言结果等于baseDate.AddDays(5)——同样的断言逻辑对In.Seven的七个From方法完全适用。源码级原理T4 模板如何生成 110 的全部量词In.Seven并非手写代码而是由 T4 文本模板 In.SomeTimeFrom.tt 批量生成。模板核心是一个for (var i 1; i 10; i)循环循环变量i即时间单位数量范围 110通过i.ToWords().Dehumanize()把数字转为单词再反人类化从而得到One、Two、…、Ten的嵌套类名属性/方法名的复数化规则为i 1 ? s : 因此One类里是单数形式Second、Minute见 In.SomeTimeFrom.cs而Seven等 210 的类里统一是复数形式Seconds、Minutes周的换算统一为AddDays(i * 7)所以Seven.Weeks实际是AddDays(49)生成代码后经编译得到最终的In.OneIn.Ten十个公开嵌套类。这意味着文档 Humanizer.In.Seven.md 中列出的 7 个属性与 7 个方法只是这套生成体系在量词 7上的实例如果你理解了Seven那么In.Five、In.Ten等其余九个类的成员形态完全同构。面向 .NET 6 的DateOnly变体InDate.Seven从源码结构看InDate.SomeTimeFrom.cs 提供了仅针对DateOnly的同构 API文件以#if NET6_0_OR_GREATER编译即只在 .NET 6 及以上目标框架生效。InDate.Seven与In.Seven的区别在于属性返回DateOnly且只覆盖天、周、月、年四种单位DateOnly没有秒、分钟、小时粒度实现上通过DateOnly.FromDateTime(DateTime.UtcNow.AddDays(49))等表达式完成From方法存在两个重载From(DateOnly date)与From(DateTime date)后者先对DateTime做加法再转成DateOnly方便同时兼容两种调用方式。因此如果你的项目面向 .NET 6 且只需要日期而无需时刻可以优先考虑InDate系列例如InDate.Seven.Days表示7 天后的日期。测试验证反射式全量校验保证生成代码正确Humanizer 对这套生成式 API 提供了系统性的测试保障集中在 GeneratedFluentDateTests.csInRelativeDatePropertiesReturnExpectedUtcOffsets通过反射遍历In的所有嵌套量词类型OneTen对每个属性在调用前后分别取DateTime.UtcNow作上下界断言属性返回值落在基准 对应单位数量的合理区间内InRelativeDateMethodsReturnExpectedOffsetsFromProvidedDate以固定日期2024-02-29 10:20:30 UTC为入参逐一断言每个From方法的返回与Add(date, amount, unit)精确相等测试中的RelativeAmounts字典显式登记[Seven] 7GeneratedFluentDateTests.csRelativeDateUnit枚举覆盖Second/Minute/Hour/Day/Week/Month/Year与In.Seven的七个成员一一对应。这套反射测试的意义在于由于In.OneIn.Ten全部由模板生成只要模板改动测试就能自动覆盖全部量词与全部单位In.Seven的正确性也随之得到持续保障。若你想亲手验证可运行dotnet test tests/Humanizer.Tests/Humanizer.Tests.csproj --filter FullyQualifiedName~GeneratedFluentDateTests。实战要点与注意事项语义即文档In.Seven.Days比DateTime.UtcNow.AddDays(7)更接近业务语言的表达适合用在到期时间、任务调度、订阅周期等场景例如var reminderAt In.Seven.DaysFrom(createdAt);。时区约定属性基于 UTC需要本地时间时显式转换避免隐式依赖运行环境时区。一次性求值属性是动态求值表达式多次读取结果不同务必先赋值给局部变量。基准可预测From方法不依赖时钟适合单元测试与可复现计算测试套件也以固定日期做精确断言。范围有限FluentDate 的In系列只覆盖 110 的量词超过 10 时仍使用DateTime.AddDays/AddMonths等原生方法或In.TheYear等工厂见 In.cs。总而言之In.Seven是 Humanizer FluentDate 生成体系中量词 7的标准实现其 7 属性 7 方法的成员形态、UTC 基准与 T4 生成机制构成了理解整套In.OneIn.TenAPI 的钥匙。结合 Humanizer.In.Seven.md 的签名文档与 GeneratedFluentDateTests.cs 的验证逻辑你可以放心地在项目中采用这类可读性极佳的相对日期写法。赞分享开发工具【免费下载链接】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.Seven「从现在起 7 天/小时」全接口参考与生成机制Humanizer 流式日期 API 详解In.Seven「从现在起 7 天/小时」全接口参考与生成机制 本篇技术指南以 Humanizer 2.13.14开发工具Humanizer InDate.Three 指南用流式日期 API 计算从现在起 3 天 / 周 / 月 / 年的日期Humanizer InDate.Three 指南用流式日期 API 计算从现在起 3 天 / 周 / 月 / 年的日期 Humanizer 的 InDa开发工具Humanizer OnDate.July以静态属性表达「今年 7 月某一天」的流式日期 API 全解Humanizer OnDate.July以静态属性表达「今年 7 月某一天」的流式日期 API 全解 Humanizer.OnDate.July 是 Hum开发工具上一篇Nuke自定义任务调度实现复杂的图片加载依赖关系下一篇终极指南Amazon Bedrock Workshop开发工具链——SDK与CLI命令行高效使用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
百度网盘下载地址解析错误代码速查:baidu-wangpan-parse 7大常见问题一次性解决指南 百度网盘下载地址解析错误代码速查:baidu-wangpan-parse 7大常见问题一次性解决指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse
baidu-wangpan-parse 是一个开… · 2026/9/25 4:02:17
SpringBoot2+Vue3+MyBatis-Plus旅游指南系统实战拆解 这个项目算是我最近手头复盘比较完整的一套 Java Web 全栈作品:一个旅游出行指南系统,技术栈是 SpringBoot2 Vue3 MyBatis-Plus MySQL8.0,源码和配套文档都是齐的。做旅游类业务其实很能检验 CRUD 之外的设计能力,因为景点、攻… · 2026/9/25 4:02:17
Keil自带逻辑分析仪:从原理到实战,轻松观察GPIO波形 /* 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 4:59:30
EPR合规指南:跨境电商必知的生产者责任延伸制度 1. EPR合规的必要性解析EPR(Extended Producer Responsibility)即生产者责任延伸制度,是近年来全球范围内快速推行的环保合规要求。简单来说,它要求商品的生产者、进口商和销售商对产品全生命周期负责,特别是废弃阶段的… · 2026/9/25 4:59:30
头歌平台损失函数手写实践:从公式到可调试代码 /* 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 4:59:30
ARPL引导编译详解:从零搭建黑群晖DSM,告别硬件适配难题 /* 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 4:59:30
Utopia 分块契约:从字符切分到“抽取一次能看见的全部”的块模型重构 后端前端人工智能RAG知识图谱知识管理搜索引擎 【免费下载链接】utopia Worlds first open-source enterprise world model. 项目地址: https://gitcode.com/gh_mirrors/ont/utopia 点击查看 免费下载 本文基于 Utopia 仓库中的设计决策记录 docs/decisions/0039-a… · 2026/9/25 4:59:29
GLSL内置函数深度解析:从smoothstep到fwidth的实战指南 前阵子调一个边缘光效的着色器,问题出在smoothstep的边界条件上:我图省事把两个edge参数传成了同一个值,结果在NVIDIA显卡上正常,在另一台AMD机器上直接出现整片闪烁。查来查去,最后老老实实打开《OpenGL Shading Lang… · 2026/9/25 4:59:23
创维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 /* 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