.Net中如何将MMM-yyyy格式日期转换为含当月首日的标准格式?
解决MMM-yyyy格式日期转.NET可识别格式的问题
当然有内置方法可以直接处理这种场景!你之前走了弯路,其实不需要手动拼接日期或者替换月份缩写,.NET的日期解析API完全支持直接解析MMM-yyyy格式的字符串,而且默认会把日设为当月第一天,正好符合你的需求。
核心解决方案:直接解析MMM-yyyy格式
你可以用DateTime.ParseExact或者更安全的DateTime.TryParseExact,指定对应的格式字符串和文化信息(因为你的月份缩写是英文的,用CultureInfo.InvariantCulture就合适):
using System.Globalization; // 你的输入字符串 string inputDate = "Apr-2019"; // 直接解析,解析后默认日为当月第一天 DateTime parsedDateTime = DateTime.ParseExact(inputDate, "MMM-yyyy", CultureInfo.InvariantCulture);
转成你需要的输出格式
解析得到DateTime对象后,就可以轻松转成任何你需要的格式了:
// 转成dd-MM-yyyy格式 string ddMmYyyyFormat = parsedDateTime.ToString("dd-MM-yyyy", CultureInfo.InvariantCulture); // 结果是 "01-04-2019" // 转成yyyy-MM-dd格式 string yyyyMmDdFormat = parsedDateTime.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture); // 结果是 "2019-04-01"
为什么你之前拼接01-Apr-2019会失败?
你之前尝试用"01-Apr-2019"和格式字符串"dd-MM-yyyy"解析失败,是因为格式字符串不匹配:
"MM"代表两位数字月份(比如04)- 而你输入的是月份缩写(Apr),对应的格式字符串应该是
"MMM"
所以如果一定要拼接日再解析,正确的写法是:
string dt = "01-Apr-2019"; DateTime newDt = DateTime.ParseExact(dt, "dd-MMM-yyyy", CultureInfo.InvariantCulture); // 这样就能正常解析了
更安全的写法:用TryParseExact避免异常
如果输入可能存在格式错误,推荐用TryParseExact来优雅处理失败场景:
if (DateTime.TryParseExact(inputDate, "MMM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result)) { // 解析成功,处理格式化逻辑 string formatted = result.ToString("yyyy-MM-dd"); } else { // 解析失败,提示用户输入格式错误 }
这样整个流程完全依赖.NET内置的日期处理能力,不需要自己写额外的转换逻辑,既简洁又可靠。
内容的提问来源于stack exchange,提问作者quasar
相关产品推荐
相关产品推荐

