解析精确地反转我的一天和一个月

本文关键字:一个 一天 我的 | 更新日期: 2023-09-27 17:56:27

下面的代码抛出异常作为无效的日期时间。 错误发生在我将其发布到我的服务器后。 在我的开发中的PC上查找工作

string str = "27-07-2015 6:15 pm";
DateTime dt = Convert.ToDateTime(DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", null).ToString("dd-MM-yyyy hh:mm tt"));

它以"27"作为月,"7"作为日。

我做了什么来解决这个问题:

  • 我已经将该服务器上的日期时间格式更新为 dd-MM-yyyy
  • 我仔细检查了日期时间格式的大写字母和小写字母。
  • 将"null"更改为"CultureInfo.InvariantCulture"
  • 将"pm"更改为"
  • PM","tt"更改为"TT"
  • 通读我在Google和StackOverflow上可以找到的所有资源,没有任何帮助。

我在这里错过了什么吗? 我知道我做到了... :(

解析精确地反转我的一天和一个月

正如@Rawling正确指出的那样,您将解析日期时间两次:第一次,使用自定义格式,其次,使用系统的默认格式。

这很愚蠢 - 您已经获得了ParseExact方法的DateTime

string str = "27-07-2015 6:15 pm";
var dt = DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", null);

就是这样,你完成了。无需再次转换为字符串,并再次解析(更糟糕的是,使用相同的自定义格式来执行ToString,因此后续Convert.ToDateTime必然会在不是默认日期时间格式的任何地方失败)。

有几种可能性;

让我们先分析一下您的DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", null)部分。这将成功解析您的27-07-2015 6:15 pm字符串,如果;

  • 您的CurrentCulture TimeSeparator:
  • 您的CurrentCulturePMDesignator PM不是空字符串

如果两者都是 oky,则表示您已成功解析DateTime

之后,您生成具有dd-MM-yyyy hh:mm tt格式的文本表示。这仍然取决于您的CurrentCulture,您的结果可能会PM或没有。对于这两种情况,都不能保证使用Convert.ToDateTime方法解析字符串,因为只有当字符串是CurrentCulture的标准日期和时间格式,才会解析字符串。

另一方面,你做的事情对我来说没有意义。首先分析字符串,然后生成字符串表示形式,然后尝试再次分析此字符串。没有意义,对吧?

我强烈怀疑你只需要;

string str = "27-07-2015 6:15 pm";
DateTime dt = DateTime.ParseExact(str, "dd-MM-yyyy h:mm tt", CultureInfo.InvariantCulture);