繁体   English   中英

C#代码始终从DateTime.TryParseExact方法返回false

[英]C# code always returns false from DateTime.TryParseExact method

我正在使用C#应用程序。 我有以下代码来验证日期:

private DateTime? ParseUserInputDate(string providedDate)
{
      DateTime validDate;
      var dateFormatIsValid = DateTime.TryParseExact(
        providedDate,
        Constants.DateFormats.UserInput,
        CultureInfo.InvariantCulture,
        DateTimeStyles.None,
        out validDate);
      return dateFormatIsValid ? validDate : (DateTime?)null;
}

当我通过“2019年2月9日12:00:00 AM”作为providedDate和UserInput格式为“d / M / YYYY”,它总是返回假。 有人可以帮我解决这个问题吗?

如果要解析时间 ,则必须在模式中提及时间部分 如果必须使用几种模式(例如,有日期和无日期),则可以将它们放入一个TryParseExact

private DateTime? ParseUserInputDate(string providedDate) {
  // we can simplify the code with a help of out var
  return DateTime.TryParseExact(providedDate,
                                new string[] {
                                  "d/M/yyyy",            // Try date first
                                  "d/M/yyyy h:m:s tt",   // if fails try date and time
                                },
                                CultureInfo.InvariantCulture,
                                DateTimeStyles.None,
                                out var validDate)
    ? validDate
    : (DateTime?) null;
}

...

// Date and Time
Console.WriteLine(ParseUserInputDate("2/09/2019 12:00:00 AM")
  .Value
  .ToString("dd.MM.yyyy HH:mm:ss"));

// Date only
Console.WriteLine(ParseUserInputDate("2/09/2019")
 .Value
 .ToString("dd.MM.yyyy HH:mm:ss"));

结果:

02.09.2019 00:00:00
02.09.2019 00:00:00

格式和输入完全不同。 如果您通过“ 2/09/2019 12:00:00 AM”,则将格式更改为“ d / M / yyyy h:mm:ss tt”

    Private static DateTime? ParseUserInputDate(string providedDate)
    {
        DateTime validDate;
        string[] formats = { "d/M/yyyy h:mm:ss tt", "d/M/yyyy" };
        var dateFormatIsValid = DateTime.TryParseExact(
          providedDate,
          formats,
          CultureInfo.InvariantCulture,
          DateTimeStyles.None,
          out validDate);
        return dateFormatIsValid ? validDate : (DateTime?)null;
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM