首页 > 解决方案 > C#从不一致的字符串转换为日期

问题描述

我正在尝试解析一个文件,在该文件中我将日期作为字符串获取,如下所示:

5/18/2020 8:38:32 AM
6/8/2021 10:11:42 PM
11/24/2021 9:21:54 AM
----

我尝试DateTime.TryParse在我的字符串上使用 a 并在 if 语句中测试“---”大小写,但它成功地只转换了6/8/2021 12:41:56 PM. 我尝试使用TryParseExact并指定日期格式,但似乎我应该用一位和两位数字制作一个案例月份,并且日期相同。

我想有些东西我没有看到或不知道。

谢谢你的帮助。

标签: c#

解决方案


这是因为您可能处于除 en-US 之外的文化中,这些日期的格式是。使用 IFormatProvider 参数。IE:

void Main()
{
    var dates = @"5/18/2020 8:38:32 AM
6/8/2021 10:11:42 PM
11/24/2021 9:21:54 AM
----";

    foreach (string s in dates.Split('\n'))
    {
        if (DateTime.TryParse(s, new CultureInfo("en-US"), DateTimeStyles.None, out DateTime d))
        {
            Console.WriteLine(d);
        }
    }
}

这是.Net小提琴链接。

编辑:请注意,.Net fiddle 上的版本略有不同,因为那里的 C# 版本较旧。


推荐阅读