新闻详情

新闻详情

首页 / 资讯中心 / 详情

Humanizer 流式日期 API 详解:In.Seven「从现在起 7 天/小时」全接口参考与生成机制

发布时间:2026/11/15 6:11:13来源:尧图网络
Humanizer 流式日期 API 详解:In.Seven「从现在起 7 天/小时」全接口参考与生成机制
开发工具【免费下载链接】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 2.13.14 版本 API 文档中的Humanizer.In.Seven类为骨架完整覆盖它的 7 个静态属性和 7 个*From方法并结合当前仓库中的源码T4 模板 生成代码与单元测试讲清这些成员的实现原理、时间基准UTC、周与月/年的换算细节以及如何在相对时间人性化humanize场景中组合使用它们。读完后你将能够准确使用In.Seven的每个成员、理解它从何而来代码生成并避开时区与月末钳位等常见陷阱。一、In.Seven 在流式日期 API 中的定位Humanizer 的 FluentDate 模块提供了一组可读性极强的流式日期 API。In类部分类public partial class In见 In.cs内部按数量词嵌套了One到Ten共十个静态嵌套类In.Seven就是其中表示从现在起 7 个单位时间的那一个。原始 API 文档页 Humanizer.In.Seven.md 描述的完整类型签名为public static class In.Seven其继承链为System.Object → Seven即它本身不实例化、只提供静态成员这是 Humanizer 流式日期 API 的典型形态所有成员都是静态的通过In.Seven.XXX这种类名 属性名的路径形成可读的伪自然语言表达。二、属性参考从现在起 7 个单位的 7 个静态属性文档页完整列出了 7 个只读静态属性全部返回System.DateTime。逐一对照 In.SomeTimeFrom.cs 中的实际实现属性签名文档语义底层实现In.Seven.Secondspublic static DateTime Seconds { get; }7 seconds from nowDateTime.UtcNow.AddSeconds(7)In.Seven.Minutespublic static DateTime Minutes { get; }7 minutes from nowDateTime.UtcNow.AddMinutes(7)In.Seven.Hourspublic static DateTime Hours { get; }7 hours from nowDateTime.UtcNow.AddHours(7)In.Seven.Dayspublic static DateTime Days { get; }7 days from nowDateTime.UtcNow.AddDays(7)In.Seven.Weekspublic static DateTime Weeks { get; }7 weeks from nowDateTime.UtcNow.AddDays(49)In.Seven.Monthspublic static DateTime Months { get; }7 months from nowDateTime.UtcNow.AddMonths(7)In.Seven.Yearspublic static DateTime Years { get; }7 years from nowDateTime.UtcNow.AddYears(7)三个值得注意的实现细节均可在 In.SomeTimeFrom.cs 中直接验证时间基准是DateTime.UtcNow。所有from now属性都基于 UTC 时间计算因此返回值的Kind为Utc。如果你的业务以本地时间展示需要在消费端自行转换时区不要把这些值与DateTime.Now直接混算。Weeks 不走AddWeeks而是AddDays(49)。模板对周的处理是i * 7天Seven.Weeks即 49 天这与BCL中DateTime没有AddWeeks的事实一致语义上等价于 7 周。属性是表达式体、每次访问重新求值。例如In.Seven.Days每次访问都会重新读取DateTime.UtcNow再偏移 7 天所以在跨越午夜/秒的时间窗口里两次访问结果可能有细微差别——它不是一个缓存下来的固定时间点。三、方法参考以任意日期为基准的 7 个 *From 方法文档页同时列出了 7 个与属性一一对应的实例基准方法参数均为System.DateTime date返回值也为System.DateTime方法签名文档语义SecondsFrompublic static DateTime SecondsFrom(DateTime date)7 seconds from the provided dateMinutesFrompublic static DateTime MinutesFrom(DateTime date)7 minutes from the provided dateHoursFrompublic static DateTime HoursFrom(DateTime date)7 hours from the provided dateDaysFrompublic static DateTime DaysFrom(DateTime date)7 days from the provided dateWeeksFrompublic static DateTime WeeksFrom(DateTime date)7 weeks from the provided dateMonthsFrompublic static DateTime MonthsFrom(DateTime date)7 months from the provided dateYearsFrompublic static DateTime YearsFrom(DateTime date)7 years from the provided date以 In.SomeTimeFrom.cs 中的实现为例所有*From方法都是对入参直接调用 BCL 的AddXxx方法public static DateTime DaysFrom(DateTime date) date.AddDays(7); public static DateTime WeeksFrom(DateTime date) date.AddDays(49); public static DateTime MonthsFrom(DateTime date) date.AddMonths(7);*From方法不做任何当前时间相关的计算因此是确定性的给定相同的date结果可复现这也是它比属性更适合单元测试的原因。单元测试如何验证 DaysFrom仓库测试 InTests.cs 用In.Five演示了同一模式的验证方式In.Seven的逻辑与之完全同构[Fact] public void InFiveDays() { var baseDate On.January.The21st; var date In.Five.DaysFrom(baseDate); Assert.Equal(baseDate.AddDays(5), date); }该测试说明两件事一是*From方法可以与On某天API 组合出从某月某日起 7 天这类链式表达式二是断言直接用date.AddDays(N)作为期望值印证了*From方法就是纯偏移、无副作用的语义。四、源码级原理In.Seven 是由 T4 模板生成的代码从源码结构看In.Seven并不是手写类。In.SomeTimeFrom.tt 是一个 T4 文本模板它对i从 1 遍历到 10为每个数字生成一个静态嵌套类类名由 Humanizer 自己的ToWords()Dehumanize()反推7的英文词形经反人性化处理得到Seven从而批量产出One到Ten#for (var i 1; i 10; i){ var plural i 1 ? s : ; var second Second plural; ... # public static class # i.ToWords().Dehumanize() # { public static DateTime # second # DateTime.UtcNow.AddSeconds(# i #); ... public static DateTime # week #From(DateTime date) date.AddDays(# i * 7 #); ... }模板生成的产物即 In.SomeTimeFrom.cs共 897 行含One至Ten十个类Seven类位于第 543–628 行。这一机制解释了 API 文档中的几个特征命名规则One内部成员用单数Second、Minute、Hour…而Two到Ten内部成员统一用复数Seconds、Days…。所以In.Seven.Days是复数形式而In.One.Day是单数形式成员覆盖面每个数量类固定拥有 7 个时间单位Second(s)、Minute(s)、Hour(s)、Day(s)、Week(s)、Month(s)、Year(s)× 2属性 *From方法 14 个成员In.Seven文档页的 7 属性 7 方法正对应这个矩阵In部分类的另一半是月份 APIIn.January、In.July等见 In.Months.cs与In.TheYear(int)返回指定年份的 1 月 1 日见 In.cs与数量类共同构成完整的In命名空间。理解这一点的实用价值在于当你在 IDE 中跳转到定义时看到的就是生成文件而非手写代码如果未来需要为所有数量类统一修改行为比如换成AddDays(49)以外的周换算修改点在 T4 模板而不是十个类。五、实战用法与注意事项典型调用场景结合文档 fluent-dates-and-time-spans.mdx 对 Fluent Date 场景的描述In.Seven最常见的用法是作为目标日期参与相对时间人性化using Humanizer; // 从现在起 7 天随后用 TimeSpanHumanize 得到 in 7 days 之类的可读文本 DateTime deadline In.Seven.Days; string display deadline.TimeSpanHumanize(); // 以任意日期为基准从 2009 年 1 月 21 日起 7 周 DateTime baseDate On.January.The21st; DateTime target In.Seven.WeeksFrom(baseDate); // baseDate.AddDays(49)这里的相对时间展示能力来自In.Seven产出的DateTime与 DateHumanizeExtensions.cs 提供的人性化扩展方法组合两者各司其职前者负责算出目标时刻后者负责把两个时刻的差距说成人话。需要注意的三个边界UTC 语义如前所述属性基于DateTime.UtcNow。跨时区展示时请显式转换例如对结果调用.ToLocalTime()而不是改用DateTime.Now自行重算。AddMonths/AddYears 的月末钳位In.Seven.Months底层是AddMonths(7)遵循 BCL 规则——若基准日是月末如 1 月 31 日加 7 个月会钳位到目标月的最后一天8 月 31 日。这是 BCL 固有行为In.Seven未做特殊处理。属性非缓存值In.Seven.XXX每次访问都重新求值。若一个业务流程中多处需要同一个 7 天后时刻应当只访问一次并保存到局部变量避免多处求值产生不一致。六、相关文档与源码路径索引本文对应的版本化 API 文档Humanizer.In.Seven.md当前版本的同名 API 文档Humanizer.In.Seven.md手写入口与TheYearIn.cs模板生成的数量类One–TenIn.SomeTimeFrom.csT4 生成模板In.SomeTimeFrom.tt行为验证测试InTests.cs同系列兄弟类文档One/Two/…/Ten各有独立的 API 文档页如 Humanizer.In.md 所在的 api 目录结构与本文一致可对照查阅赞分享开发工具【免费下载链接】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点击查看免费下载相关推荐Census Reporter响应式设计揭秘从桌面到移动设备的无缝体验Census Reporter响应式设计揭秘从桌面到移动设备的无缝体验 Census Reporter是一款由Knight News Challenge资助的开发工具Humanizer 流式日期 API 详解In.Seven 的 7 个时间单位属性与方法Humanizer 流式日期 API 详解In.Seven 的 7 个时间单位属性与方法 本篇技术指南围绕 Humanizer 流式日期FluentDate开发工具Humanizer In.Four 完整指南用流式 API 计算从现在起 4 秒/分钟/小时/天/周/月/年的日期Humanizer In.Four 完整指南用流式 API 计算从现在起 4 秒/分钟/小时/天/周/月/年的日期 In.Four 是 Humanizer开发工具上一篇Immutables 与反应式编程RxJava2 和 Reactor 集成方案下一篇如何为Rust Lambda函数添加分布式追踪OpenTelemetry集成终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉