You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core3.1迁移.NET6后DateTime.MMM格式4字母缩写的全局修复方案

.NET 6迁移后en-AU文化下月份缩写全局修复方案

从.NET Core3.1迁移到.NET6后,使用en-AU区域文化时,DateTime.ToString("MMM")输出的月份缩写变为4字母(如July、Sept),而非原3字母格式,以下是全局修复方案:

  • 方案一:通过项目配置启用Windows NLS(仅Windows平台)
    在项目的.csproj文件中添加如下配置,强制.NET使用Windows原生的全球化数据(与.NET Core3.1行为一致):

    <PropertyGroup>
      <UseNls>true</UseNls>
    </PropertyGroup>
    

    配置后重新编译项目,月份缩写会恢复为3字母格式。

  • 方案二:通过环境变量全局切换全球化提供程序(跨平台)
    设置环境变量让.NET使用NLS而非默认的ICU:

    • Windows:在命令行执行 set DOTNET_SYSTEM_GLOBALIZATION_USENLS=true,或在系统环境变量中添加该条目。
    • Linux/macOS:在终端执行 export DOTNET_SYSTEM_GLOBALIZATION_USENLS=true,或将该命令添加到shell配置文件(如~/.bashrc)中。
      该设置对所有.NET应用生效,无需修改代码。
  • 方案三:自定义全局DateTimeFormatInfo(跨平台)
    在应用启动时修改en-AU文化的月份缩写,全局生效。在控制台程序的Main方法开头添加以下代码:

    using System.Globalization;
    
    var enAuCulture = CultureInfo.GetCultureInfo("en-AU");
    var customDateFormat = (DateTimeFormatInfo)enAuCulture.DateTimeFormat.Clone();
    
    // 替换为3字母月份缩写
    customDateFormat.AbbreviatedMonthNames = new[] { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "" };
    customDateFormat.AbbreviatedMonthGenitiveNames = customDateFormat.AbbreviatedMonthNames;
    
    // 设置为全局默认文化
    CultureInfo.DefaultThreadCurrentCulture = enAuCulture;
    CultureInfo.DefaultThreadCurrentUICulture = enAuCulture;
    

    此方案不受平台和全球化提供版本影响,完全自定义格式。

内容的提问来源于stack exchange,提问作者wal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:20:43