【问题标题】:String was not recognized as a valid DateTime even if I provide valid Date format [closed]即使我提供有效的日期格式,字符串也未被识别为有效的日期时间 [关闭]
【发布时间】:2017-11-06 14:52:49
【问题描述】:

我正在尝试将字符串转换为DateTime 格式,而我的string 看起来是这种格式:

10.11.2017. 0:00:00

我想像这样将它转换为日期时间:

DateTime expireDate = DateTime.ParseExact(MyFormat, "dd/MM/yyyy HH:mm:ss", null);

我使用 HH 是因为我使用的是 24 小时格式

但它抛出了一个错误:

String was not recognized as a valid DateTime

我想知道这有什么问题?我提供了格式 10.11.2017。我认为 DateTime 可以接受,但不幸的是它不是:/

【问题讨论】:

  • 在 ParseExact 中,格式字符串应完全匹配提供的输入
  • 您是否尝试将格式从"dd/MM/yyyy HH:mm:ss" 更改为"dd.MM.yyyy. H:mm:ss"
  • @MuhammadAhmad 是的,这是正确的解决方案

标签: c# wpf parsing datetime


【解决方案1】:

试试这个:

string s = "10.11.2017. 0:00:00";
DateTime expireDate = DateTime.ParseExact(s, "dd.MM.yyyy. H:mm:ss", CultureInfo.InvariantCulture);

【讨论】:

  • 另一件事,在某些计算机上,日期写为 10/11/2017,而在某些计算机上,日期写为 10.11.2017 [有时斜线有时点作为分隔符] 所以我怎样才能写出精确的解析那里?在那里做最实际的事情是什么?转换 DateTime ToString("dd.MM.yyyy");独立于分隔符时间,之后我可以使用 ParseExact 与点没有问题? :)
  • 是的,在使用 ParseExact 之前将字符串转换为通用格式。
【解决方案2】:

您没有使用正确的格式转换它。这应该有效:

DateTime expireDate = DateTime.ParseExact("10.11.2017. 0:00:00", "dd.MM.yyyy. HH:mm:ss", CultureInfo.InvariantCulture);

【讨论】:

  • *来自格式。 DateTime 没有任何格式。
  • 我更新了答案以确保参数里面有什么
  • @Fildor 指的是您回答的第一行,其中您说“将其转换为格式”。
  • 您可以将格式化的字符串转换为DateTime,而不是格式,DateTime 没有格式。
  • 对不起。我的错。我的英语失败了。感谢指正
【解决方案3】:

不,您没有提供确切的日期格式。您告诉 ParseExact 期望一个两位数的小时,但该示例仅提供一个 0。日期部分也是如此,您期望 / 作为分隔符,但您提供了一个带点的字符串。

您的输入似乎不确定。鉴于这种不确定性,我建议使用 DateTime.TryParseExact 而不是 ParseExact。这允许您使用一系列可能的输入格式来将解析调整为接收到的确切格式

DateTime expireDate;
string test = "10.11.2017. 0:00:00";
string[] formats = {"dd.MM.yyyy. h:mm:ss", "dd/MM/yyyy. h:mm:ss", 
                    "dd.MM.yyyy. HH:mm:ss", "dd/MM/yyyy. HH:mm:ss"};
bool result = DateTime.TryParseExact(test, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out expireDate);
if (result) 
    Console.WriteLine(expireDate.ToString("dd/MM/yyyy HH:mm:ss"));

不确定年份之后的点是否是错字。如果出现拼写错误,也将其从上述格式中删除

【讨论】:

  • 为什么您需要多种格式来表示一位/两位数的小时数? h 说明符将涵盖这两种变体。
猜你喜欢
  • 2021-07-22
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-07
  • 1970-01-01
相关资源
最近更新 更多