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'