尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

Humanizer InDate.Seven 指南:用 7 天/周/月/年构建 DateOnly 日期偏移

发布时间:2026/9/25 5:20:20

资讯中心
01
ARTICLE

Humanizer InDate.Seven 指南:用 7 天/周/月/年构建 DateOnly 日期偏移

Humanizer InDate.Seven 指南:用 7 天/周/月/年构建 DateOnly 日期偏移
开发工具【免费下载链接】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.Seven类为核心系统讲解 Humanizer FluentDate API 中从现在起 7 天、7 周、7 个月、7 年之后这一组日期计算能力包括 4 个静态属性Days、Weeks、Months、Years与 8 个静态方法DaysFrom等各自提供DateOnly与DateTime两种重载。读完本文你将掌握InDate.Seven每个成员的确切签名、返回语义与底层实现原理并能与In基于DateTime的兄弟类、InDate.Five等相邻 API 对照使用写出可读性更强的日期偏移代码。InDate.Seven 是什么FluentDate 中的七号门面Humanizer 提供了一组以自然语言命名的 FluentDate API让日期计算代码读起来像一句英文短语。InDate.Seven是其中专门表达7这个数量单位的嵌套静态类命名空间为Humanizerpublic static class InDate.Seven从继承关系看它直接继承自System.ObjectInDate是一个public partial class内部嵌套了一组数字类One到Ten。与返回DateTime的In.Seven不同InDate.Seven的全部成员都返回System.DateOnly——只携带年/月/日不携带时刻与时区信息适用于日历日级别的计算场景。需要特别注意的是InDate系列的源码被#if NET6_0_OR_GREATER条件编译指令包裹见 InDate.SomeTimeFrom.cs因为DateOnly是 .NET 6 才引入的 BCL 类型。也就是说InDate.Seven仅在 .NET 6 及更高版本的运行时可用面向旧版本框架的项目应改用In.Seven返回DateTime定义于 In.SomeTimeFrom.cs。四个静态属性从现在起算的日期InDate.Seven暴露了 4 个只读静态属性全部以DateTime.UtcNowUTC 当前时刻为基准向后偏移再经DateOnly.FromDateTime截取日期部分。下表汇总了每个属性的语义与底层调用属性含义返回类型底层实现对应 InDate.SomeTimeFrom.csDays7 天后的今天System.DateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddDays(7))Weeks7 周后的今天System.DateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddDays(49))Months7 个月后的今天System.DateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddMonths(7))Years7 年后的今天System.DateOnlyDateOnly.FromDateTime(DateTime.UtcNow.AddYears(7))使用方式非常简单using Humanizer; DateOnly sevenDaysLater InDate.Seven.Days; // 例如 2026-09-24 → 2026-10-01 DateOnly sevenWeeksLater InDate.Seven.Weeks; // 49 天后 DateOnly sevenMonthsLater InDate.Seven.Months; // 7 个自然月后 DateOnly sevenYearsLater InDate.Seven.Years; // 7 年后两个细节值得留意UTC 基准属性基于DateTime.UtcNow计算而不是本地时间。如果调用方期望本地时区的 7 天后结果可能与本地日历相差一天取决于时区偏移这一点从源码中的DateTime.UtcNow调用可以得到直接印证。周 自然日叠加Weeks不是调用AddDays(7 * 7)之外的任何周语义而是纯粹的AddDays(49)与Days一样按日历日推进。八个静态方法从指定日期起算除了基于当前时刻的属性InDate.Seven还提供 8 个静态方法允许以任意给定日期为基准计算偏移。每个时间单位都有DateOnly重载与DateTime重载两个版本完整清单如下DaysFrom —— 7 天后的日期public static System.DateOnly DaysFrom(System.DateOnly date); public static System.DateOnly DaysFrom(System.DateTime date);DaysFrom(DateOnly date)返回date.AddDays(7)直接对DateOnly做天数加法。DaysFrom(DateTime date)返回DateOnly.FromDateTime(date.AddDays(7))先对DateTime加 7 天再截取日期部分。WeeksFrom —— 7 周后的日期public static System.DateOnly WeeksFrom(System.DateOnly date); public static System.DateOnly WeeksFrom(System.DateTime date);WeeksFrom(DateOnly date)返回date.AddDays(49)。WeeksFrom(DateTime date)返回DateOnly.FromDateTime(date.AddDays(49))。MonthsFrom —— 7 个月后的日期public static System.DateOnly MonthsFrom(System.DateOnly date); public static System.DateOnly MonthsFrom(System.DateTime date);MonthsFrom(DateOnly date)返回date.AddMonths(7)遵循自然月语义例如 1 月 31 日 7 个月会按 .NET 的AddMonths规则做月末截断。MonthsFrom(DateTime date)返回DateOnly.FromDateTime(date.AddMonths(7))。YearsFrom —— 7 年后的日期public static System.DateOnly YearsFrom(System.DateOnly date); public static System.DateOnly YearsFrom(System.DateTime date);YearsFrom(DateOnly date)返回date.AddYears(7)闰日2 月 29 日会按AddYears的规则收敛。YearsFrom(DateTime date)返回DateOnly.FromDateTime(date.AddYears(7))。典型用法using Humanizer; DateOnly dueDate new(2026, 9, 24); DateOnly newDate1 InDate.Seven.DaysFrom(dueDate); // 2026-10-01 DateOnly newDate2 InDate.Seven.WeeksFrom(dueDate); // 2026-11-12 DateOnly newDate3 InDate.Seven.MonthsFrom(dueDate); // 2027-04-24 DateOnly newDate4 InDate.Seven.YearsFrom(dueDate); // 2033-09-24 // DateTime 重载自动剥掉时刻只保留日期 DateOnly newDate5 InDate.Seven.DaysFrom(new DateTime(2026, 9, 24, 15, 30, 0)); // 2026-10-01DateOnly 与 DateTime 两种重载的取舍同一单位出现两个重载并非冗余而是对应两种常见调用场景传入DateOnly输入本身就只有日历语义方法内部直接调用DateOnly.AddDays / AddMonths / AddYears不经过任何转换路径最直接源码见 InDate.SomeTimeFrom.cs。传入DateTime输入携带时刻甚至Kind属性方法先用Add*完成偏移再通过DateOnly.FromDateTime丢弃时刻部分。这样设计保证了无论传入什么时刻结果永远是纯日期。如果你的代码上游只有DateTime例如从数据库或DateTime.Now获取的值可以直接使用DateTime重载而无需手动DateOnly.FromDateTime转换如果上游已经是DateOnly.NET 6 的日历型数据则优先选择DateOnly重载语义更精确、零转换开销。源码深挖T4 模板如何批量生成 One 到 TenInDate.Seven并不是手写一次就完事它与InDate.One到InDate.Ten全部由同一个 T4 文本模板批量生成。打开 InDate.SomeTimeFrom.tt 可以看到核心循环逻辑for (var i 1; i 10; i) { var plural i 1 ? s : ; // 类名通过 i.ToWords().Dehumanize() 生成1 → One、7 → Seven public static class # i.ToWords().Dehumanize() # { // Days / Weeks / Months / Years 及其 From 方法 } }这个模板揭示了几个工程细节类名自动生成i.ToWords()把数字转成英文单词7→seven再经Dehumanize()变成 PascalCase 的Seven最终得到InDate.Seven。单复数约定One内部的成员是单数形式Day、Week、Month、Year而Two到Ten含Seven统一使用复数形式Days、Weeks、Months、Years。模板中的plural变量正是为此而设。周数按天折算Weeks的模板代码是DateTime.UtcNow.AddDays(i * 7)因此Seven.Weeks固定等于AddDays(49)与手写实现完全一致。配套的 DateTime 版本同目录下的 In.SomeTimeFrom.cs及对应的 In.SomeTimeFrom.tt用同样的模板思路生成In.One到In.Ten但返回类型是DateTime而非DateOnly两个门面类互为补充。测试验证生成代码的行为契约仓库测试对这批生成的相对日期 API 做了系统性的契约校验可作为使用时的行为依据InDateTests.cs 中的InFiveDays用例验证了组合用法先用OnDate.January.The21st构造基准日期再调用InDate.Five.DaysFrom(baseDate)断言结果等于baseDate.AddDays(5)——InDate.Seven的方法族遵循完全相同的偏移契约。GeneratedFluentDateTests.cs 通过反射遍历InDate下所有嵌套类型InDateRelativeDatePropertiesReturnExpectedUtcOffsets在调用前后各取一次DateTime.UtcNow断言属性返回值落在[Add(before, amount, unit), Add(after, amount, unit)]区间内InDateRelativeDateOnlyMethodsReturnExpectedOffsetsFromProvidedDate与InDateRelativeDateTimeMethodsReturnExpectedOffsetsFromProvidedDateTime则分别验证两类From方法。其中RelativeAmounts字典把Seven映射为7见 GeneratedFluentDateTests.cs正是这套反射校验的数据来源。使用注意与延伸阅读适用框架InDate.Seven依赖DateOnly仅存在于 .NET 6 及以上目标框架In.Seven则面向所有框架版本。时区语义四个属性基于 UTC 计算需要本地时区语义时请使用From方法并传入本地日期。月份/年份边界Months、Years沿用 .NETAddMonths/AddYears的边界收敛规则如月末、闰日不会抛异常。相邻 API本文档同属 FluentDate 系列 API 文档可对照InDate的其他数字类如 InDate.Five与InDate的月份类如 InDate.January 相关页面需要每年/每月的某个具体日期时可配合 InDate.cs 中的TheYear(int year)使用若追求DateTime语义参考 In.Seven。一句话总结InDate.Seven把7 天/周/月/年后的日期这一高频计算封装成自然语言级 API——用属性表达从现在起用From方法表达从指定日期起两者都返回纯DateOnly让日期偏移代码既清晰又不易出错。赞分享开发工具【免费下载链接】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.Seven 完全指南用流式 API 一步算出 7 天/周/月/年后的日期Humanizer InDate.Seven 完全指南用流式 API 一步算出 7 天/周/月/年后的日期 InDate.Seven 是 Humanizer开发工具Humanizer InDate.Four API 详解用 DateOnly 构建从某日起 4 天/周/月/年的流式日期计算Humanizer InDate.Four API 详解用 DateOnly 构建从某日起 4 天/周/月/年的流式日期计算 本文基于 Humanizer开发工具Humanizer InDate.Ten 详解用 DateOnly 流式 API 计算 10 天/周/月/年后的日期Humanizer InDate.Ten 详解用 DateOnly 流式 API 计算 10 天/周/月/年后的日期 InDate.Ten 是 Humaniz开发工具上一篇CANN Runtime Stream 资源预算实战从可用 Stream 查询到 Vector Core 限制的线程绑定下一篇【免费下载】 HLW8110/HLW8112电压电流电量采集芯片全套资料助力高效能电力监测创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

◈

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

◐

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

▲

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。