C# Humanizer库使用方法 C#如何将日期、数字转换为易读字符串
发布时间 - 2026-01-30 00:00:00 点击率:次Humanizer 中文支持需显式指定 zh-CN 文化,全局设 CultureInfo.DefaultThreadCurrentCulture;数字读法分 Ordinalize(序数)和 SpellOut(基数);须安装 Humanizer.Core.zh-CN 子包并确保版本匹配。
Humanizer

ToHumanize() 但要注意文化上下文
默认情况下 ToHumanize() 输出英文(如 “2 hours ago”),想输出中文必须显式指定 zh-CN 文化。不设 culture 会走当前线程默认,线上环境容易出错。
- 正确写法:
DateTime.Now.AddHours(-2).ToHumanize(new CultureInfo("zh-CN"))→ “2 小时前” - 若项目全局用中文,建议在启动时设置:
CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("zh-CN"); - 注意
ToHumanize()对未来时间也生效,比如DateTime.Now.AddMinutes(5)返回 “5 分钟后”,无需额外判断方向 - 它不处理格式化精度,
TimeSpan.FromMinutes(1.8)会被截断为 “1 分钟”,不会显示秒级
数字转中文读法:用 Ordinalize() 和 SpellOut() 区分场景
Ordinalize() 是“第几”的序数表达,SpellOut() 是“几十几”的基数读法,二者语义不同,混用会导致逻辑错误。
- 序数(带“第”):
21.Ordinalize(new CultureInfo("zh-CN"))→ “第二十一” - 基数(纯读数):
123.SpellOut(new CultureInfo("zh-CN"))→ “一百二十三” - 小数支持有限:
3.14.SpellOut()报错,需先转整数或手动拆解 - 大数字(如百万以上)在中文里默认不自动加“万/亿”,
10000.SpellOut()返回 “一万个”,不是 “一万”——这是 Humanizer 的设计限制,不是 bug
安装与基础引用:NuGet 包名是 Humanizer.Core.zh-CN,不是 Humanizer
只装 Humanizer 主包,调用中文方法会静默失败或回退英文。中文支持是按语言拆分的子包,必须单独引用。
- NuGet 命令:
dotnet add package Humanizer.Core.zh-CN - 同时需确保主包版本匹配,例如
Humanizer.Core.zh-CN 4.0.0要求Humanizer 4.0.0(非 3.x) - ASP.NET Core 项目中,若用
IStringLocalizer混用 Humanizer,注意资源文件路径和 culture 传递链路,否则zh-CN可能被覆盖
常见报错:System.Globalization.CultureNotFoundException 或空字符串返回
这通常不是代码写错,而是 culture 名称拼写错误或未加载对应资源。Humanizer 对 culture 名称大小写敏感,且不接受别名(如 zh 不行,必须 zh-CN)。
- 检查是否误写成
zh-china、ZH-CN或zh_Hans—— 全部无效 - 运行时验证 culture 是否可用:
CultureInfo.GetCultures(CultureTypes.AllCultures).Any(c => c.Name == "zh-CN") - 某些 Linux 容器缺少中文 locale,需在 Dockerfile 中添加:
RUN apt-get update && apt-get install -y locales && locale-gen zh_CN.UTF-8 - 如果返回空字符串而非抛异常,大概率是 culture 加载失败后 fallback 到空实现,务必加日志输出实际传入的
CultureInfo实例
# linux
# go
# docker
# c#
# .net
# 天下
# 字符串
# 线程
# bug
# 英文
# 报错
# 这是
# 加载
# 空字符串
# 线上
# 二十一
# 不支持
# 十几
# 三点
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
Laravel如何保护应用免受CSRF攻击?(原理和示例)
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Laravel如何与Inertia.js和Vue/React构建现代单页应用
浅谈Javascript中的Label语句
javascript基于原型链的继承及call和apply函数用法分析
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
中山网站制作网页,中山新生登记系统登记流程?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
实例解析angularjs的filter过滤器
Laravel如何使用Socialite实现第三方登录?(微信/GitHub示例)
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
iOS中将个别页面强制横屏其他页面竖屏
canvas 画布在主流浏览器中的尺寸限制详细介绍
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Laravel Docker环境搭建教程_Laravel Sail使用指南
如何快速搭建FTP站点实现文件共享?
Laravel Seeder填充数据教程_Laravel模型工厂Factory使用
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
太平洋网站制作公司,网络用语太平洋是什么意思?
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
海南网站制作公司有哪些,海口网是哪家的?
,南京靠谱的征婚网站?
米侠浏览器网页图片不显示怎么办 米侠图片加载修复
Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层
什么是javascript作用域_全局和局部作用域有什么区别?
想要更高端的建设网站,这些原则一定要坚持!
Python文件流缓冲机制_IO性能解析【教程】
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
西安专业网站制作公司有哪些,陕西省建行官方网站?
为什么要用作用域操作符_php中访问类常量与静态属性的优势【解答】
JavaScript中如何操作剪贴板_ClipboardAPI怎么用
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
Python文件操作最佳实践_稳定性说明【指导】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何在IIS中新建站点并配置端口与物理路径?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
个人摄影网站制作流程,摄影爱好者都去什么网站?
历史网站制作软件,华为如何找回被删除的网站?
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
html如何与html链接_实现多个HTML页面互相链接【互相】
如何实现javascript表单验证_正则表达式有哪些实用技巧
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
Laravel如何升级到最新版本?(升级指南和步骤)
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Laravel如何使用withoutEvents方法临时禁用模型事件

