C# 这是我的一天和一个月

C# 这是我的一天和一个月,c#,datetime,C#,Datetime,下面的代码将异常作为无效日期时间抛出。错误发生在我将其发布到服务器之后。在我正在开发的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”表示日 我是如何解决这个问题的: 我已经将该服务器上的日期时间格式

下面的代码将异常作为无效日期时间抛出。错误发生在我将其发布到服务器之后。在我正在开发的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正确指出的那样,您将对datetime进行两次解析:第一次,使用自定义格式,第二次,使用系统的默认格式

这很愚蠢-您已经有了
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
  • 您的
    CurrentCulture
    PM
    (不是空字符串)
如果两者都正常,则表示您已成功解析了
DateTime

之后,您将使用
dd-MM-yyyy-hh:MM-tt
格式生成它的文本表示。这仍然取决于您的
CurrentCulture
,您的结果可能有
PM
。对于这两种情况,都不能保证使用
Convert.ToDateTime
方法解析字符串,因为它将由您的stri解析ng仅当它是您当前文化的一部分时才

另一方面,你所做的对我来说没有意义。你先解析你的字符串,然后生成它的字符串表示,然后再尝试解析这个字符串。没有意义,对吗

我强烈怀疑你只是需要

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

什么是您的
CurrentCulture
?为什么要将字符串解析为
DateTime
,将其转换回字符串,然后将其转换为
DateTime
?DateTime结构不保存显示格式信息我之所以使用
Convert.ToDateTime
,是因为有时我想将其转换为另一种格式,例如例如'dd-MMM-yyyy,HH:mm'等等。@user3431239这是一个表示问题,而不是数据问题。当您想要显示日期时间(或者说,将其存储在文件中)时,可以使用
ToString
(本地或不变,取决于具体场景).但是内部表示应该仍然是相同的
日期时间
-字符串只是实际值的表示。