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

本文关键字:字符串 返回 然后 格式化 DateTime | 更新日期: 2023-09-27 18:17:35

我正在从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();

两个版本都崩溃了,并出现"String was not recognized as a valid DateTime."错误。

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

问题出在格式参数上。您的字符串不是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);

根据MSDN:

DateTime。ParseExact(String, String, IFormatProvider)方法解析日期的字符串表示形式,其格式必须为由format参数定义。它还要求和出现表示日期和时间的字符串元素按格式指定的顺序,并且没有其他空白

所以,如果我正确阅读,你指定的格式为"ddMMyyyy",但你的字符串是在"M/dd/yyyy h:mm:ss tt"。尝试将格式更改为"M/dd/yyyy h:mm:ss tt"或切换到DateTime.TryParse().

如果您使用ParseExact,那么您必须指定确切的格式:"M/d/yyyy h:mm:ss tt",它匹配您的日期字符串"5/25/2011 8:47:00 AM"

您可以使用以下命令获取日期/时间的日期组件:

DateTime dateTime = DateTime.Now;
DateTime dateOnly = dateTime.Date;