TryParse DateTime c#dd / mm / yyyy hh:ss

时间:2016-10-25 01:19:18

标签: c# .net date parsing datetime

我知道这已被问过很多次了,但似乎没有一个问题与我的问题有关(所有答案都指定了另一个日期时间格式而不是给我问题的格式):

Convert string(dd/MM/yyyy hh:mm) to datetime format

Converting a String to DateTime

Convert dd/MM/yyyy hh:mm:ss.fff from String to DateTime in C#

具体示例:

输入是一个字符串:24/10/2016 10:20

我致电DateTime.TryParse(input, out output)

输出为DateTime{1/1/0001 12:00:00 AM}

为什么呢?这是我所知道的完全有效的输入格式......

我尝试的事情/限制:

  • 将输入更改为第二个:24/10/2016 10:20:00,它可以正常工作
  • 使用TryParseExact,指定此格式,它可以正常工作

但是,我不能同时使用这两种解决方案,因为输入是用户定义的,我不能强迫用户坚持特定的输入,并且想要接受任何合理格式化的日期时间。我在问题中指定的格式似乎是合理的(它是Excel输出的默认格式)。

我可以假设文化是en-US

任何帮助都将不胜感激。

更新 第一个问题的最佳答案引发了一个例外......我不知道为什么这个问题甚至被投票。

更新2:

由于有很多关闭请求,这里有一些最小的工作代码(与Mohit Shrivastava的答案重复):

string dtstr = "24/10/2016 10:20";
DateTime outdt;
DateTime.TryParse(dtstr, out outdt);
Console.WriteLine(outdt);
Console.ReadLine();

Minimal code

2 个答案:

答案 0 :(得分:2)

您的输出为1/1/0001 12:00:00 AM,这是DateeTime对象的最小值,这意味着转换失败(根据此documentation)。使用当前线程文化隐式提供的当前DateTimeFormatInfo对象中的格式信息来解析字符串输入。所以问题是你传递的日期字符串的格式。

尝试以更智能的方式使用TryParseExact方法,因为您知道字符串输入的格式,如下所示:

  string dateString ="24/10/2016 10:20";
  string formatString="dd/MM/yyyy HH:mm";
  DateTime dateValue;
  CultureInfo enUS = new CultureInfo("en-US"); // is up to you
  if (DateTime.TryParseExact(dateString, formatString , enUS, 
                                 DateTimeStyles.None, out dateValue))

答案 1 :(得分:0)

相同的代码在我的机器上提供正确的输出。

string dtstr = "24/10/2016 10:20";
DateTime outdt;
DateTime.TryParse(dtstr, out outdt);
Console.WriteLine(outdt);
Console.ReadLine();

You can look at the outdt variable