将字符串解析为DateTime,格式化,然后返回字符串 - C#

时间:2011-12-12 00:58:25

标签: c# .net datetime

我从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”。错误。

3 个答案:

答案 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;