Blazor WebAssembly .NET5中DateTime.ToString不遵循当前文化日期格式问题
这确实是 .NET 5 版本 Blazor WebAssembly 的已知未修复 Bug。
问题原因
.NET 5 的 Blazor WASM 运行时在文化信息初始化阶段存在缺陷:运行时会正确识别浏览器传递的区域标识、给 CultureInfo.CurrentCulture 的 Name、DisplayName 等属性赋值正确的目标区域值,但不会同步从 ICU 国际化数据中加载对应区域的格式化规则,默认沿用了 en-US 的日期、数字等格式化配置,所以会出现你观测到的 CultureInfo.Name 是 en-GB,但 ShortDatePattern 依然是 M/d/yyyy 的矛盾现象。
即使你显式传入 en-GB 的 CultureInfo 实例调用 ToString 也不会生效,因为这个问题是运行时层面的 ICU 数据加载错误,所有文化实例的格式化属性都会被错误初始化为 en-US 的配置。
解决方案
- 最优方案:直接升级项目到 .NET 6 及以上版本,该 Bug 已经被官方修复,你测试的 .NET 6.0.0-rc.1 及后续正式版都可以正常加载对应区域的格式化规则。
- 如果你必须保留在 .NET 5 版本,可以手动覆写当前文化的格式化配置,在 Blazor WASM 项目的
Program.cs的Main方法末尾添加如下代码即可:
var targetCulture = CultureInfo.GetCultureInfo("en-GB"); // 手动覆盖短日期格式为英国格式 targetCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy"; // 如有需要可以同步覆盖其他格式规则,比如长日期、时间、数字格式等 CultureInfo.CurrentCulture = targetCulture; CultureInfo.CurrentUICulture = targetCulture;
内容的提问来源于stack exchange,提问作者Patrick Szalapski
相关产品推荐
相关产品推荐

