我从MS SQL Server 2008数据库中提取日期/时间并尝试格式化日期以仅以“dd / MM / yyyy”格式显示日期。
数据库中的数据如下所示:
2011-05-04 15:50:00.000
显示时未格式化的字符串显示如下:
5/25/2011 8:47:00 AM
然而,当我尝试将其解析为正确的格式时,此代码失败:
DateTime dateA = DateTime.ParseExact(curShopDate, "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
curShopDate = dateA.ToString();
我也试过这段代码,试图将日期部分与时间分开:
string[] stringA = curShopDate.Split(' ');
DateTime dateA = DateTime.ParseExact(stringA[0], "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);
curShopDate = dateA.ToString();
两个版本都崩溃了“字符串未被识别为有效的DateTime”。错误。
答案 0 :(得分:4)
问题在于您的格式参数。您的字符串不是ddMMyyyy
格式,而是M/dd/yyyy
格式:
string curShopDate = "5/25/2011 8:47:00 AM";
DateTime dateA = DateTime.ParseExact(curShopDate.Split(' ')[0], "M/dd/yyyy",
System.Globalization.CultureInfo.InvariantCulture);
您也可以解析字符串而不从日期中删除时间:
string curShopDate = "5/25/2011 8:47:00 AM";
DateTime dateA = DateTime.ParseExact(curShopDate, "M/dd/yyyy h:mm:ss tt",
System.Globalization.CultureInfo.InvariantCulture);
答案 1 :(得分:2)
根据MSDN:
DateTime.ParseExact(String,String,IFormatProvider)方法解析 日期的字符串表示形式,必须采用格式 由format参数定义。它还要求和 出现日期和时间的字符串表示的元素 按格式指定的顺序,并且s没有其他空格 比格式允许的那样。
所以,如果我正确阅读,你将格式指定为“ddMMyyyy”,但你的字符串是“M / dd / yyyy h:mm:ss tt”。尝试将格式更改为“M / dd / yyyy h:mm:ss tt”或切换到DateTime.TryParse()。
答案 2 :(得分:0)
如果您使用ParseExact,则必须指定确切的格式:"M/d/yyyy h:mm:ss tt"
,它与您的日期字符串"5/25/2011 8:47:00 AM"
匹配。
您可以使用以下日期/时间的日期部分:
DateTime dateTime = DateTime.Now;
DateTime dateOnly = dateTime.Date;