【问题标题】:Why DateTime.TryParseExact is not working?为什么 DateTime.TryParseExact 不起作用?
【发布时间】:2019-11-19 16:01:07
【问题描述】:

我正在从 Excel 中读取日期并将其存储在变量 In_Date 中, 用于比较日期的格式存储在 Valid_Date_Formats

In_Date = "08/01/2020 00:00:00"

Valid_Date_Formats 是一个存储多种日期格式的数组。

我正在检查 if 条件中的格式,但它总是失败。

If(DateTime.TryParseExact(In_Date, Valid_Date_Formats,
    System.Globalization.CultureInfo.InvariantCulture,
    System.Globalization.DateTimeStyles.None,
    DateTime_PlaceHolder))

我在这里做错了什么。

【问题讨论】:

  • 也许我遗漏了一些东西,但示例日期“In_Date = "08/01/2020 00:00:00" 的格式为 MM/dd/yyyy... 我看不到在您的有效格式数组中设置格式。此外,我在您的有效格式数组中看不到任何时间格式,如果您的日期包含时间,这将很重要。
  • 在您的 Valid_Date_Formats 中,我看不到小时和分钟。
  • @FernandoG 我加了,还是失败
  • @StefanoBalzarotti 我还需要添加吗?
  • TryParseExact 表示完全匹配提供的格式。您的所有格式都不包括时间部分。如果您使用 InvariantCulture,请使用 MM/dd/yyyy ... 格式,否则您将得到月/日不匹配和相关异常。否则,如果日期格式不同(如dd/MM/yyyy),则使用本地设置。

标签: c# asp.net asp.net-mvc vb.net


【解决方案1】:

输入字符串的格式如下:dd/MM/yyyy HH:mm:ssValid_Date_Formats 中缺少此格式。 (我假设08 是这一天,因为所有其他格式都以日期部分开头。)

以下返回正确的日期:

DateTime.ParseExact("08/01/2020 00:00:00", new[] { "dd/MM/yyyy HH:mm:ss" }, CultureInfo.InvariantCulture, DateTimeStyles.None)

回应您的评论:我不知道有一个内置方法可以告诉您使用了哪种确切的格式字符串。如果您真的需要找出答案,我想您可以遍历格式直到找到匹配项:

string[] formats = new[] { "dd/MM/yyyy", "dd/MM/yyyy HH:mm:ss" };
string input = "08/01/2020 00:00:00";

string usedFormat = null;
DateTime date;

foreach (string format in formats)
{
    if (DateTime.TryParseExact(input, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out date))
    {
        usedFormat = format;
        break;
    }
}

【讨论】:

  • 如果你想检测代码中的格式,然后通过检查循环中的每个字符自己解析字符串。此外,如果您不关心时间部分,则可以在调用 ParseExact 之前将其从输入字符串中删除
  • @Rufus L,您是否发现在解析之前从输入字符串中删除时间是否可以?我认为这应该没问题,但我无法解析我的字符串。
  • @KrisBunda 你说的“如果可以的话”是什么意思?为什么会不好?听起来您可能想提出一个新问题并发布未按预期工作的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-07
  • 2019-08-06
  • 2016-07-05
  • 2011-08-06
  • 2013-01-18
相关资源
最近更新 更多