我看了一些关于"字符串未被识别为有效日期时间"的问题,但无法得到答案。这是我的问题。我有代码
DateTime.ParseExact(dr[3].ToString(), "dd-MM-yyyy tt h:m:s", System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat).ToString("MMM. dd yyyy hh:mm tt")
它在本地主机上工作正常,但在IIS服务器上有问题。如。我的Sql Server 2008 R2中的日期是"2014-03-05 09:10:17.040"。
您的自定义格式错误。如果你使用DateTime.ParseExact
方法,你的格式和字符串应该完全匹配。
将日期和时间的指定字符串表示形式转换为其使用指定的格式和特定于区域性的DateTime等效格式的信息。字符串表示的格式必须匹配
由于字符串以year开头,因此需要首先使用yyyy
格式。我假设你的03
是月,05
是日。h
格式适用于1
~ 12
。因为你的时间是09
,你应该使用HH
格式,这是00
到23
。
m
格式可以用于此字符串,但0
到59
。您可能需要使用mm
格式,这是00
到59
。第二部分也是同样的情况。
您还需要fff
格式为您的毫秒部分。
yyyy-MM-dd HH:mm:ss.fff
格式。例如,
string s = "2014-03-05 09:10:17.040";
var date = DateTime.ParseExact(s,
"yyyy-MM-dd HH:mm:ss.fff",
CultureInfo.InvariantCulture);
Console.WriteLine(date);
输出将是;
3/5/2014 9:10:17 AM
这里有 demonstration
。
解析字符串后,您可以使用DateTime.ToString()
方法格式化任何您想要的字符串,如;
date.ToString("MMM. dd yyyy hh:mm tt");
在asp.net中调试时,我得到dr的格式为17-03-2014 PM2:53:04
但这与你在问题中写的示例日期格式不同!无论如何,对于这种情况,您可以使用dd-MM-yyyy tt h:mm:ss
格式。
,
var date = DateTime.ParseExact("17-03-2014 PM 2:53:04",
"dd-MM-yyyy tt h:mm:ss",
CultureInfo.InvariantCulture);
Console.WriteLine(date);
不幸的是,看起来你的日期在你的数据库中没有标准的日期格式。在这种情况下,用一种格式解析它们是不可能的。
只有你可以使用DateTime.ParseExact(String, String[], IFormatProvider, DateTimeStyles)
重载,你可以在字符串数组中使用多种格式的字符串。
你正在使用ParseExact,它只在你解析的格式与字符串的格式匹配时才会起作用。
在你的代码中,你期望"dd-MM-yyyy tt h:m:s"
在你给出的例子中("2014-03-05 09:10:17.040"),它在
yyyy-MM-dd HH:mm:ss
尝试将其更改为DateTime.Parse()
,并让它自己决定格式
Try This:
DateTime.ParseExact(dr[3].ToString(), "yyyy-MM-dd hh:mm:ss.fff",
System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat).
ToString("MMM.dd yyyy hh:mm tt")