.NET Core 7中瑞典文化下DateTime.ToString的MMM格式异常问题
解决瑞典文化格式化日期带点的问题
问题原因
你本地Windows 11 21H2系统的瑞典语区域设置中,月份短缩写被配置为带点格式(比如apr.),而.NET在Windows平台会优先读取系统的区域配置,而非默认的文化资源。Azure App Service使用的是标准未修改的瑞典文化定义,所以输出正常的apr。
解决方案
1. 修改系统区域设置
- 打开Windows设置 → 时间和语言 → 语言和区域
- 找到瑞典语条目,点击「选项」→「格式」→「其他日期、时间和区域设置」
- 选择「更改日期、时间或数字格式」→「其他设置」
- 切换到「日期」选项卡,找到「月份」区域的短格式设置,将带点的缩写(如
apr.)改为不带点的apr,保存后重启应用即可生效。
2. 代码层面自定义日期格式
如果不想修改系统设置,可以在代码中自定义DateTimeFormatInfo,强制使用不带点的月份缩写:
var date = DateTime.UtcNow; // 获取瑞典文化对象,建议直接使用文化名称而非LCID,更可靠 var cultureInfo = new CultureInfo("sv-SE"); // 克隆文化对象,避免修改全局默认配置 var customCulture = (CultureInfo)cultureInfo.Clone(); // 替换月份缩写数组,移除点号 customCulture.DateTimeFormat.AbbreviatedMonthNames = new[] { "jan", "feb", "mar", "apr", "maj", "jun", "jul", "aug", "sep", "okt", "nov", "dec", "" }; // 同时修改所有格形式的月份缩写,保持一致 customCulture.DateTimeFormat.AbbreviatedMonthGenitiveNames = customCulture.DateTimeFormat.AbbreviatedMonthNames; var dateString = date.ToString("dd MMM yyyy", customCulture); Console.WriteLine(dateString);
3. 验证文化对象的来源
避免依赖LCID查找文化,直接使用new CultureInfo("sv-SE")获取标准瑞典文化,部分情况下系统自定义的LCID对应配置可能被修改,而文化名称对应的默认配置更稳定。
内容的提问来源于stack exchange,提问作者Swapnil Lomate
相关产品推荐
相关产品推荐

