C#从不一致的字符串转换为日期

时间:2021-06-09 10:45:21

标签: c#

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

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

我尝试在我的字符串上使用 DateTime.TryParse 并在 if 语句中测试 "---" 情况,该语句有效但仅成功转换了 6/8/2021 12:41:56 PM。 我尝试使用 TryParseExact 并指定日期格式,但似乎我应该用一位和两位数字创建一个 case 月份,并且日期相同。

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

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

这是因为您可能使用的文化不是 en-US,这些日期的格式是使用 IFormatProvider 参数。即:

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 fiddle link.

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

答案 1 :(得分:0)

没有确切的细节,我只能猜测:

如果他只能翻译 6/8 日期,那么您的区域设置可能有误(您有类似 MM/dd/yyyy 之类的东西....但这仅适用于 6 月 8 日,您可能会出错8 月 6 日)

如果您使用 ParseExact,您还可以提供有效格式字符串的列表。

编辑

Cetins 的回答是正确的。此外,帖子的标题有点混乱,因为日期时间字符串是一致的(在“en-US”本地设置中)

答案 2 :(得分:0)

@Cetin Basoz 你说得对,这确实是一个文化问题。谢谢!

@nabuchodonossor 您对日期时间字符串(“----”分开)保持一致是正确的。我想说的是,如果日期是 05/18/2020 和 06/08/2021 之类的日期,则不会出现日期或月份的每次两位数。抱歉,我很难做到准确。

相关问题