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

C#如何过滤列表中非法日期格式并转换为指定yyyyMMdd格式

代码修改方案

现有代码的问题是直接使用DateTime.ParseExact进行解析,当遇到不符合指定格式的非法日期字符串时会抛出异常,无法实现过滤效果。我们可以通过DateTime.TryParseExact校验日期合法性,仅保留解析成功的结果。

优化后代码(推荐,仅单次解析性能更高)

using System.Globalization;

public static List<string> TransformDateFormat(List<string> dates)
{
    // 保留你原本定义的合法日期格式
    var formats = new string[]
    {
        "yyyy/MM/dd",
        "dd/MM/yyyy",
        "MM-dd-yyyy",
        "dd.MM.yyyy"
    };
    var result = new List<string>();
    foreach (var dateStr in dates)
    {
        // 尝试解析日期,解析成功才添加到结果集
        if (DateTime.TryParseExact(dateStr, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime parsedDate))
        {
            result.Add(parsedDate.ToString("yyyyMMdd"));
        }
    }
    return result;
}

参数说明

  • CultureInfo.InvariantCulture:固定解析规则,不受运行环境的系统区域设置影响,确保你指定的4种日期格式能被正确识别。
  • DateTimeStyles.None:严格匹配你定义的日期格式,不做额外的规则调整。

如果你偏好LINQ链式写法,也可以用如下实现,但会多一次解析操作,性能略低:

using System.Globalization;

public static List<string> TransformDateFormat(List<string> dates)
{
    var formats = new string[]
    {
        "yyyy/MM/dd",
        "dd/MM/yyyy",
        "MM-dd-yyyy",
        "dd.MM.yyyy"
    };
    return dates
        .Where(date => DateTime.TryParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out _))
        .Select(date => DateTime.ParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None).ToString("yyyyMMdd"))
        .ToList();
}

内容的提问来源于stack exchange,提问作者App B

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 15:15:05