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

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

发布时间:2026/9/25 5:20:19 来源:云帆数科 栏目:资讯中心
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),仅供参考

相关推荐

highlight.io Session Replay 功能全景:从会话录制到检索、过滤与实时回放的完整指南
highlight.io Session Replay 功能全景:从会话录制到检索、过滤与实时回放的完整指南

可观测性后端 【免费下载链接】highlight highlight.io: The open source, full-stack monitoring platform. Error monitoring, session replay, logging, distributed tracing, and more. 项目地址: https://gitcode.com/gh_mirrors/hi/highlight 点击查看 免费下… · 2026/9/25 5:20:19

shadPS4 0.7.0 启动就崩溃?完整排查与修复指南
shadPS4 0.7.0 启动就崩溃?完整排查与修复指南

shadPS4 0.7.0 启动就崩溃?完整排查与修复指南 【免费下载链接】shadPS4 PlayStation 4 emulator for Windows, Linux, macOS and FreeBSD written in C 项目地址: https://gitcode.com/GitHub_Trending/sh/shadPS4 如果你把 PS4 模拟器 shadPS4 升级到 0.7.… · 2026/9/25 5:20:19

湘桂、赣粤、湘粤运河横向拆解:南岭越岭方案谁能胜出?
湘桂、赣粤、湘粤运河横向拆解:南岭越岭方案谁能胜出?

最近在运河规划这个话题下,经常能看到一个三方对比:湘桂运河、赣粤运河、湘粤运河。乍一看都是“挖一条新运河”,不少朋友会问:这三条是不是一回事?选哪条更好?是不是只有一条能落地?我把目前能… · 2026/9/25 5:20:19

四向链表实现:从任意节点遍历不重复的完整指南
四向链表实现:从任意节点遍历不重复的完整指南

/* 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 6:24:12

自动控制原理核心:奈氏图与奈氏稳定判据详解
自动控制原理核心:奈氏图与奈氏稳定判据详解

/* 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 6:24:12

AutoCAD 2023错误4005根本原因与四步修复指南
AutoCAD 2023错误4005根本原因与四步修复指南

/* 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 6:24:12

没有微软应用商店?离线部署Intel显卡控制面板完整指南
没有微软应用商店?离线部署Intel显卡控制面板完整指南

/* 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 6:24:12

高云FPGA ILA调试实战:从配置失效到波形捕获的全流程解析
高云FPGA ILA调试实战:从配置失效到波形捕获的全流程解析

/* 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 6:24:06

游戏窗口拉不动?用SRWE的Force EXITSIZEMOVE开关解决Hotsampling失效问题
游戏窗口拉不动?用SRWE的Force EXITSIZEMOVE开关解决Hotsampling失效问题

游戏窗口拉不动?用SRWE的Force EXITSIZEMOVE开关解决Hotsampling失效问题 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 玩窗口化游戏想拍高清截图,却遇到"改了分辨率游戏画面不跟… · 2026/9/25 6:24:06

数值优化(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

了解更多?预约专属演示

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

企业微信二维码