我正在尝试从C#中保存当前的日期时间格式,并将其转换为SQL yyyy-MM-dd HH:mm:ss
之类的SQL Server日期格式,以便我可以将其用于我的UPDATE
查询。
这是我的第一个代码:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
日期输出没问题,但时间总是“12:00:00”所以我将代码更改为以下内容:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
它给了我这个编译错误:
FormatException未处理
并建议我需要解析。所以我根据我在StackOverflow中的研究尝试对我的代码执行此操作:
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#中还是有点新鲜,你能帮帮我吗?
答案 0 :(得分:170)
尝试以下
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
答案 1 :(得分:36)
使用标准日期时间格式“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
Method
答案 2 :(得分:6)
正确答案已经给出了“使用参数”。格式化日期并将其作为字符串传递给SQL-Server可能会导致错误,因为它取决于设置如何在服务器端解释日期。在欧洲,我们写“1.12.2012”表示2012年12月1日,而在其他国家,这可能被视为1月12日。
直接在SSMS中发布语句时,我使用的格式yyyymmdd
似乎非常普遍。到目前为止,我没有遇到任何问题。
还有另一种很少使用的格式,这有点奇怪,但适用于所有版本:
select { d '2013-10-01' }
将于2013年10月1日返回。
select { ts '2013-10-01 13:45:01' }
将于10月1日,下午1:45:01返回
我强烈建议您使用参数和从不格式化您自己的SQL代码,方法是将自己开发的格式化语句片段粘贴在一起。它是SQL注入和奇怪错误的一个条目(格式化浮点值是另一个潜在的问题)
答案 3 :(得分:3)
你的第一个代码可以通过这个来实现
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); //Remove myDateTime.Date part
答案 4 :(得分:3)
您的问题出现在“日期”属性中,仅将DateTime
截断为日期。
您可以像这样进行转换:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!
答案 5 :(得分:3)
让我们使用内置的SqlDateTime类
new SqlDateTime(DateTime.Now).ToSqlString()
但是仍然需要检查空值。这将引发溢出异常
new SqlDateTime(DateTime.MinValue).ToSqlString()
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
答案 6 :(得分:2)
我正在寻找的答案是:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
我也了解到你可以这样做:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString(myCountryDateFormat);
可以根据需要更改myCountryDateFormat以满足更改。
请注意,标记为“此问题可能已经有答案:”实际上没有回答问题,因为您可以看到它使用“。日期”而不是省略它。这对.NET的新程序员来说非常困惑
答案 7 :(得分:1)
为什么不完全跳过字符串:
SqlDateTime myDateTime = DateTime.Now;
答案 8 :(得分:0)
您的问题出现在Date
属性中,仅截断DateTime
日期。您可以像这样进行转换:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss");
答案 9 :(得分:0)
如果您想将当前日期存储在表格中,那么您可以使用
GETDATE();
或将此功能作为参数
传递例如。 &#39;更新tblname set curdate = GETDATE()其中colname = 123&#39;
答案 10 :(得分:0)
将DateTime从C#传递到SQL Server的另一种解决方案,而与SQL Server语言设置无关
假设您的“区域设置”将日期显示为dd.MM.yyyy(德国标准'104'),然后
DateTime myDateTime = DateTime.Now;
string sqlServerDate ="CONVERT("date,'"+myDateTime+"',104)";
根据“ 104”规则考虑映射,将C#datetime变量传递给SQL Server Date类型变量。 SQL Server日期获取yyyy-MM-dd
如果您的“区域设置”以不同的方式显示DateTime,则使用SQL Server CONVERT表中的适当匹配项
详细了解规则:https://www.techonthenet.com/sql_server/functions/convert.php
答案 11 :(得分:0)
我认为问题在于缺少两个单引号。
这是我运行到MSSMS的SQL:
WHERE checktime >= '2019-01-24 15:01:36.000' AND checktime <= '2019-01-25 16:01:36.000'
如您所见,有两个单引号,因此您的代码必须为:
string sqlFormattedDate = "'" + myDateTime.Date.ToString("yyyy-MM-dd") + " " + myDateTime.TimeOfDay.ToString("HH:mm:ss") + "'";
在MSSQL甚至MySQL中的每个字符串都使用单引号。我希望这会有所帮助。
答案 12 :(得分:-1)
只有你把“T”+ DateTime.Now.ToLongTimeString()+'2015-02-23'
答案 13 :(得分:-1)
如果您想使用该dateTime更新表,可以使用您的sql字符串,如下例所示:
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());
答案 14 :(得分:-1)
DateTime date1 = new DateTime();
date1 = Convert.ToDateTime(TextBox1.Text);
Label1.Text = (date1.ToLongTimeString()); //11:00 AM
Label2.Text = date1.ToLongDateString(); //Friday, November 1, 2019;
Label3.Text = date1.ToString();
Label4.Text = date1.ToShortDateString();
Label5.Text = date1.ToShortTimeString();