C#如何将带序数词的日期字符串转换为YYYY-MM-DD格式?
C# 处理带序数后缀的日期字符串转换
要解决这类包含序数后缀(st/nd/rd/th)的日期字符串转换问题,核心思路是先清理掉序数后缀,再统一解析为DateTime对象,最后格式化为YYYY-MM-DD。
实现步骤
- 清理日期字符串:用正则表达式移除日期数字后的序数后缀(st/nd/rd/th)。
- 解析日期:使用
DateTime.TryParseExact指定格式解析清理后的字符串,确保不受系统区域影响。 - 格式化输出:将解析后的
DateTime对象转换为YYYY-MM-DD格式。
代码示例
using System; using System.Text.RegularExpressions; using System.Globalization; public static class DateConverter { public static string ToIsoDateFormat(string inputDate) { // 移除序数后缀,保留数字部分 string cleanedDate = Regex.Replace(inputDate, @"(\d+)(st|nd|rd|th)", "$1"); // 支持两种日期格式:带前导零的日(dd)和不带前导零的日(d) string[] dateFormats = { "dd MMMM yyyy", "d MMMM yyyy" }; if (DateTime.TryParseExact(cleanedDate, dateFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate)) { return parsedDate.ToString("yyyy-MM-dd"); } // 解析失败时可根据业务需求调整处理逻辑,比如返回空或抛出异常 throw new FormatException("输入日期格式无效"); } }
测试验证
- 输入
"07th December 2022"→ 输出"2022-12-07" - 输入
"08 December 2022"→ 输出"2022-12-08" - 输入
"1st December 2022"→ 输出"2022-12-01" - 输入
"9th January 2023"→ 输出"2023-01-09"
注意事项
- 使用
CultureInfo.InvariantCulture确保解析英文月份时不受系统区域设置干扰。 - 如果还有其他日期格式变体(比如缩写月份
Dec),可以在dateFormats数组中添加对应的格式(如"dd MMM yyyy")。
内容的提问来源于stack exchange,提问作者Umer
相关产品推荐
相关产品推荐

