【问题标题】:TryParse DateTime c# dd/mm/yyyy hh:ss [closed]TryParse DateTime c# dd/mm/yyyy hh:ss [关闭]
【发布时间】:2017-03-06 21:50:41
【问题描述】:

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

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();

【问题讨论】:

  • 能否请您也显示您正在运行的代码。
  • 允许用户定义格式是自找麻烦。这就是为什么最好为日、月和年设置单独的输入字段或下拉菜单,或者限制格式。
  • @Dijkgraaf 这是从 CSV 文件中解析出来的。我正在尝试适应所有格式合理的日期时间,如果这很疯狂,那么我会很高兴地放弃记录。
  • 我不认为你会有一个完美的解决方案,例如当用户输入10/11/2016 23:11:59。我相信您可以完美地检索时间部分,但我们永远不知道用户想要日期11 Oct10 Nov
  • Alex 是对的,如果没有指定文化,您无法判断输入是月/日/年还是日/月/年。但是 - 你说你可以假设en-US,你举了一个24/10/2016的例子,这在那个文化中是无效的,因为美国使用月/日/年,@987654339 @ 不是有效月份。所以你的要求是不清楚和矛盾的。

标签: c# .net date parsing datetime


【解决方案1】:

您的输出是 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))

【讨论】:

    【解决方案2】:

    相同的代码在我的机器上给出了正确的输出。

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

    【讨论】:

    • 请看我的更新。完全相同的代码会产生错误
    猜你喜欢
    • 2020-05-03
    • 2016-12-25
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2012-11-20
    • 1970-01-01
    相关资源
    最近更新 更多