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

C#如何将带序数词的日期字符串转换为YYYY-MM-DD格式?

C# 处理带序数后缀的日期字符串转换

要解决这类包含序数后缀(st/nd/rd/th)的日期字符串转换问题,核心思路是先清理掉序数后缀,再统一解析为DateTime对象,最后格式化为YYYY-MM-DD。

实现步骤

  1. 清理日期字符串:用正则表达式移除日期数字后的序数后缀(st/nd/rd/th)。
  2. 解析日期:使用DateTime.TryParseExact指定格式解析清理后的字符串,确保不受系统区域影响。
  3. 格式化输出:将解析后的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:55:13