date时间格式转换为SQL格式使用C#

我试图从C#中保存当前的date时间格式,并将其转换为像这样yyyy-MM-dd HH:mm:ss的SQL Serverdate格式,因此我可以将其用于我的Update查询。

这是我的第一个代码:

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss"); 

在date输出是好的,但时间总是“12:00:00”,所以我改变了我的代码如下:

 string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.TimeOfDay.ToString("HH:mm:ss"); 

它给了我一个编译错误“FormatException未处理”,并build议我需要parsing。 所以我试图按照我的研究在这里以我的代码做到这一点在staackoverflow:

 string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss"); 

要么

 string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss"); 

但它给了我一个方法,在给定的上下文中是无效的。 我试图寻找解决我的问题,目前停留两个小时。 我在C#中还是有点新的,你能帮忙吗?

试试下面

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff"); 

使用标准date时间格式“s”也将确保国际化兼容性(MM / dd与dd / MM):

 myDateTime.ToString("s"); => 2013-12-31T00:00:00 

完整选项:(代码:样本结果)

 d: 6/15/2008 D: Sunday, June 15, 2008 f: Sunday, June 15, 2008 9:15 PM F: Sunday, June 15, 2008 9:15:07 PM g: 6/15/2008 9:15 PM G: 6/15/2008 9:15:07 PM m: June 15 o: 2008-06-15T21:15:07.0000000 R: Sun, 15 Jun 2008 21:15:07 GMT s: 2008-06-15T21:15:07 t: 9:15 PM T: 9:15:07 PM u: 2008-06-15 21:15:07Z U: Monday, June 16, 2008 4:15:07 AM y: June, 2008 'h:mm:ss.ff t': 9:15:07.00 P 'd MMM yyyy': 15 Jun 2008 'HH:mm:ss.f': 21:15:07.0 'dd MMM HH:mm:ss': 15 Jun 21:15:07 '\Mon\t\h\: M': Month: 6 'HH:mm:ss.ffffzzz': 21:15:07.0000-07:00 

在.NET Framework中受支持:4.6,4.5,4,3.5,3.0,2.0,1.1,1.0
参考: DateTime.ToString方法

正确答案已经被赋予了“使用参数”。 格式化date并将其作为string传递给SQL-Server可能会导致错误,因为它取决于date在服务器端的解释方式。 在欧洲,我们写“2012年12月1日”来表示2012年12月1日,而在其他国家这可能会被视为1月12日。

当直接在SSMS中发布语句时,我使用的格式是yyyymmdd ,这个格式看起来相当普遍。 到目前为止,我在各种设备上没有遇到任何问题。

还有一个很less使用的格式,这有点奇怪,但适用于所有版本:

 select { d '2013-10-01' } 

将返回2013年10月的第一个。

 select { ts '2013-10-01 13:45:01' } 

将于10月1日,1:45:01 PM返回

我强烈build议使用参数,并且不要通过粘贴本地格式化的语句片段来格式化自己的SQL代码。 这是一个SQL注入和奇怪的错误(格式化浮点值是另一个潜在的问题)

你的第一个代码将通过这样做

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part 

您的问题是在“date”属性截断DateTime时间仅date。 你可以把这样的转换:

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()! 

我正在寻找的答案是:

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); 

我也了解到,你可以这样做:

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat); 

myCountryDateFormat可以根据需要改变以适应变化。

请注意标记的“这个问题可能已经在这里有一个答案:”实际上没有回答这个问题,因为你可以看到它使用“.Date”,而不是省略它。 对.NET的新程序员来说,这是相当混乱的

为什么不完全跳过string:

 SqlDateTime myDateTime = DateTime.Now; 

只有你把“T”+ DateTime.Now.ToLongTimeString()+'2015-02-23'

如果你想用dateTime更新表,你可以使用你的sqlstring,例如:

 int fieldId; DateTime myDateTime = DateTime.Now string sql = string.Format(@"UPDATE TableName SET DateFieldName='{0}' WHERE FieldID={1}, myDateTime.ToString("yyyy-MM-dd HH:mm:ss"), fieldId.ToString()); 

您的问题是在Date属性截断DateTime仅date。 你可以把这样的转换:

 DateTime myDateTime = DateTime.Now; string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); 

如果你想在表中存储当前的date,所以你可以使用

GETDATE();

或者将此函数作为参数传递

例如。 'update tblname set curdate = GETDATE()where colname = 123'