为什么DateTime TryParse返回日期为{01/01/0001 00:00:00}?

时间:2019-10-08 11:17:29

标签: c# asp.net c#-4.0

我正在这样做

string[] formats = { "yyyy-MM-dd" };

DateTime outDate;

DateTime.TryParseExact(DateTime.Now.ToString(), 
                       formats,
                       new CultureInfo("en-US"),
                       DateTimeStyles.None, 
                       out outDate);

interfaceoperation.LogDate = outDate;
interfaceoperation.LogTime = outDate;

LogDateLogTime的类型为DateTime

但是它返回outdate的值为{01/01/0001 00:00:00}

为什么?

2 个答案:

答案 0 :(得分:0)

我认为问题在于日期格式,我们将必须添加正确的日期格式。

 DateTime.TryParseExact(DateTime.Now.ToString(), DateTime.Now.GetDateTimeFormats(),
                             new CultureInfo("en-US"),
                             DateTimeStyles.None, out outDate);

否则我们将必须添加正确的日期格式。

Or you can retrieve it directly from the wafer you use date:  
string[] formats = {"M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt",
                         "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss",
                         "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt",
                         "M/d/yyyy h:mm", "M/d/yyyy h:mm",
                         "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};

答案 1 :(得分:0)

好吧,DateTime.TryParseExact在无法解析给定的字符串时,都会返回falseDateTime.MinValue(即01/01/0001 00:00:00)。

https://docs.microsoft.com/en-us/dotnet/api/system.datetime.tryparseexact?view=netframework-4.8

  

此方法返回时,包含等于的DateTime值   如果转换成功,则s中包含的日期和时间,或者   MinValue,如果转换失败。如果   s或format参数为null,为空字符串或不包含   与格式指定的模式相对应的日期和时间。   此参数未初始化传递。

看来,您想更多 formats被提及:

   // Test value
   // Something like "10/08/2019 2:47:58 PM"
   string value = DateTime.Now.ToString(CultureInfo.GetCultureInfo("en-US"));

   ...

   string[] formats = { 
     "R",                  // RFC1123 e.g. 2019-10-08T14:39:47
     "yyyy-M-d",
     "yyyy-M-d H:m:s",
     "M/d/yyyy",           // en-US special: date only
     "M/d/yyyy H:m:s",     // en-US special: date and 24 hour time
     "M/d/yyyy h:m:s tt",  // en-US special: date and 12 hour time
   };       

   DateTime outDate;

   if (DateTime.TryParseExact(value, 
                              formats,
                              CultureInfo.GetCultureInfo("en-US"),
                              DateTimeStyles.None, out outDate)) {
       // Parsing succeeded

       interfaceoperation.LogDate = outDate;
       interfaceoperation.LogTime = outDate;
   }
   else
   {
       // Parsing failed
   }