在C#项目里,把数据库里的日期和数字直接展示给用户往往不够直观。Humanizer库提供了一组扩展方法,可以把DateTime、TimeSpan、数字、枚举等转换成人类易读的自然语言字符串,而且支持多语言。下面先看一张示意图。

如何安装Humanizer
可以通过NuGet包管理器安装,也可以在包管理控制台执行以下命令:
// 使用NuGet控制台安装Humanizer Install-Package Humanizer
安装完成后,在代码文件顶部引入命名空间即可使用:
using Humanizer;
日期和时间的易读转换
Humanizer对DateTime和TimeSpan提供了Humanize扩展方法,能输出相对于当前时间的人性化描述。
using System;
using Humanizer;
class Demo
{
static void Main()
{
// 三天前的时间
DateTime threeDaysAgo = DateTime.Now.AddDays(-3);
// 输出:3 days ago
Console.WriteLine(threeDaysAgo.Humanize());
// 两小时之后的时间
DateTime inTwoHours = DateTime.Now.AddHours(2);
// 输出:in 2 hours
Console.WriteLine(inTwoHours.Humanize());
// 时间跨度转换
TimeSpan span = TimeSpan.FromMinutes(90);
// 输出:1 hour, 30 minutes
Console.WriteLine(span.Humanize());
}
}
指定语言文化
如果需要中文等本地化输出,可以传入CultureInfo:
using System;
using System.Globalization;
using Humanizer;
class LocalDemo
{
static void Main()
{
DateTime yesterday = DateTime.Now.AddDays(-1);
// 输出中文:昨天
Console.WriteLine(yesterday.Humanize(culture: new CultureInfo("zh-CN")));
}
}
数字的易读转换
数字可以转成序数词、带单位读法,或者大数简写。
using Humanizer;
class NumberDemo
{
static void Main()
{
int num = 23;
// 序数词:23rd
Console.WriteLine(num.Ordinalize());
long big = 1234567;
// 简写:1.2 million
Console.WriteLine(big.ToWords());
Console.WriteLine(big.ToQuantity());
// 转成英文单词:one hundred and twenty-three
Console.WriteLine(num.ToWords());
}
}
枚举值转换
枚举成员名通常带下划线,Humanizer可转成自然标题:
using Humanizer;
enum OrderStatus
{
PendingPayment,
ShippedOut
}
class EnumDemo
{
static void Main()
{
// 输出:Shipped Out
Console.WriteLine(OrderStatus.ShippedOut.Humanize());
}
}
使用注意
- Humanize默认基于当前线程文化,多语言项目要显式传CultureInfo。
- 时间描述依赖当前时间,单元测试中建议注入固定时钟或使用确定性时间。
- 大数ToWords在中文文化下支持有限,英文场景更稳定。
借助Humanizer,C#开发者可以用极少量代码把日期、数字和枚举展示为易读字符串,显著提升产品文案体验。
C#_Humanizer日期格式化数字本地化修改时间:2026-07-31 00:54:20