字符串到C#中的DateTime转换

愚蠢的问题,但无法解决它…我有一个这种格式的字符串20081119

我有一个C#方法将字符串转换为DateTime以输入SQL Server数据库

public static DateTime MyDateConversion(string dateAsString) { return System.DateTime.ParseExact(dateAsString, "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture); } 

问题是日期是这样的:Date = 19/11/2008 12:00:00 AM我需要它是yyyyMMdd类型的DateTime,因为我将它映射到一个模式来调用存储过程。

先谢谢你们。

干杯,Con

没有“yyyyMMdd类型的DateTime”这样的东西; DateTime只是一个大整数,表示一个纪元中的时间量 – 它没有格式。 但这很好,因为你应该使用参数化的TSQL – 所以只需添加DateTime作为DbParameter的值,它将以明确的方式传递给db(不要使用字符串连接来构建TSQL命令) ):

 DbParameter param = cmd.CreateParameter(); param.ParameterName = "@foo"; param.DbType = DbType.DateTime; param.Value = yourDateTime; // the DateTime returned from .ParseExact cmd.Parameters.Add(param); 

或者对于SqlCommand

 cmd.Parameters.Add("@foo", SqlDbType.DateTime).Value = yourDateTime; 

如果你真的需要一个字符串,那么只需将字符串直接用作[n] [var] char参数。

另外 – 在这种情况下,要解析日期我将使用不变文化(因为文化不具有格式):

 DateTime yourDateTime = DateTime.ParseExact(dateString, "yyyyMMdd", CultureInfo.InvariantCulture); 

从对话中,您可能还需要从DateTime转到字符串,在这种情况下只需将其反转:

 string dateString = yourDateTime.ToString("yyyyMMdd", CultureInfo.InvariantCulture); 

Date Time是一个类,默认情况下,它将ToString格式化为19/11/2008 12:00:00 AM

这是来自MSDN ,它可以帮助您

由于日期和时间值的出现取决于诸如文化,国际标准,应用程序要求和个人偏好等因素,因此DateTime结构通过其ToString方法的重载在格式化日期和时间值方面提供了极大的灵活性。 默认的DateTime.ToString()方法使用当前区域性的短日期和长时间模式返回日期和时间值的字符串表示forms。 以下示例使用默认的DateTime.ToString()方法,使用en-US文化的短日期和长时间模式显示日期和时间,en-US文化是运行该示例的计算机上的当前文化。

因此,您可以将DateTime上的ToString重载为所需的格式,否则将字符串表示直接传递给存储过程

好的,回到文化的东西……当你说:

日期如下:Date = 19/11/2008 12:00:00 AM

我猜你在日期运行ToString来看到这个结果? ToString中的格式将根据文化而有所不同,默认情况下将使用您当前的文化。

通过这样做,我能够重现你所获得的格式:

 var dateString = "20081119"; var fr = new System.Globalization.CultureInfo("fr-FR"); var resultingDate =DateTime.ParseExact(dateString,"yyyyMMdd",System.Globalization.CultureInfo.CurrentCulture); Console.WriteLine(resultingDate.ToString(fr)); 

你有一个有效的日期,所以格式化无关紧要,但如果确实如此,你需要以你描述的格式得到它,那么你需要在转换为字符串时格式化…如果它已经是一个字符串,那么就没有必要进行日期转换。

我可能会误读你的问题,但是我不得不把它拿出来b / c它让我烦恼。

我认为这是由于CurrentCulture中的文化设置,不知道那是什么,我无法确定,但指定en-US在我的最终工作。 这是我的代码:

 var dateString = "20081119"; var enUS = new System.Globalization.CultureInfo("en-US"); var resultingDate = DateTime.ParseExact(dateString,"yyyyMMdd",enUS); Console.WriteLine(resultingDate.ToString()); 

试一试,看看它是否适合你。

这将给出您正在寻找的确切结果:

convert(varchar(10),getdate(),112):datetime to string(YYYYMMDD format)

convert(datetime,’20081203’,112):string to datetime(YYYYMMDD format)

代码方:

DateTimeFormatInfo fmt =(new CultureInfo(“hr-HR”))。DateTimeFormat; Console.WriteLine(thisDate.ToString(“d”,fmt)); //显示15.3.2008(根据您的要求使用类似格式)

要么

date1.ToString(“YYYYMMDD”,CultureInfo.CreateSpecificCulture(“en-US”))date1.ToString(“YYYYMMDD”);

有关详细信息,请访问http://msdn.microsoft.com/en-us/library/az4se3k1.aspx