C#如何将字符串日期转换为指定格式 解决ParseExact转换异常
错误原因
你代码里的格式字符串用错了:MMMM格式符匹配的是完整月份全称(比如August),但你的输入字符串里月份是3位缩写AUG,和格式要求不匹配,自然会抛出格式异常。3位月份缩写对应的格式符是MMM。
正确实现代码
先把输入字符串用匹配3位月份缩写的格式解析为DateTime对象,再把对象格式化为你需要的完整月份名输出格式即可:
using System.Globalization; string originDateStr = "04-AUG-2022"; // 解析阶段用匹配3位月份缩写的格式 DateTime dateObj = DateTime.ParseExact( originDateStr, "dd-MMM-yyyy", CultureInfo.InvariantCulture ); // 格式化阶段用MMMM输出完整月份名 string targetDateStr = dateObj.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture);
运行后targetDateStr的值就是你需要的04 August 2022。
补充说明
- 解析和格式化环节都建议传入
CultureInfo.InvariantCulture,避免运行环境的区域语言设置差异,导致月份名识别错误、输出不符合预期。 - 常用C#月份格式符区分:
MM:两位数字形式的月份,比如08代表8月MMM:三位缩写形式的月份,比如AUG、JanMMMM:完整名称形式的月份,比如August、January
内容的提问来源于stack exchange,提问作者NAKED_DEVELOPER
相关产品推荐
相关产品推荐

