下面的代码抛出异常作为无效的日期时间。 错误发生在我将其发布到我的服务器后。 在我的开发中的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
是:
和 - 您的
CurrentCulture
的PMDesignator
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);