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-chinaZH-CNzh_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 实例
Humanizer 的中文能力依赖 culture 资源完整性,不是所有数字/日期组合都覆盖到位,比如农历、节气、相对时间跨天(“昨天下午三点”)目前不支持,得自己补逻辑。


# 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方法临时禁用模型事件