我试图从C#保存当前日期时间格式并将其转换为SQL Server日期格式,yyyy-MM-dd HH:mm:ss所以我可以将它用于我的UPDATE查询.
这是我的第一个代码:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
日期输出没问题,但时间总是"12:00:00",所以我将代码更改为以下内容:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.TimeOfDay.ToString("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
它给了我这个编译错误:
FormatException未处理
并建议我需要解析.所以我根据我在StackOverflow中的研究尝试对我的代码执行此操作:
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.Parse.TimeOfDay.ToString("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
要么
string sqlFormattedDate = myDateTime.Date.ToString("yyyy-MM-dd") + " " +
myDateTime.tryParse.TimeOfDay.ToString("HH:mm:ss");
Run Code Online (Sandbox Code Playgroud)
但它告诉我,这是一种对给定的上下文无效的方法.我试着寻找解决问题的方法,现在我被困了两个小时.我在C#中还是有点新鲜,你能帮帮我吗?
Deb*_*yay 192
试试这个
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss.fff");
Run Code Online (Sandbox Code Playgroud)
InA*_*ive 42
Using the standard datetime format "s" will also ensure internationalization compatibility (MM/dd versus dd/MM):
myDateTime.ToString("s");
=> 2013-12-31T00:00:00
Run Code Online (Sandbox Code Playgroud)
Complete Options: (code: sample result)
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
Run Code Online (Sandbox Code Playgroud)
Supported in .NET Framework: 4.6, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0
Reference: DateTime.ToString Method
mkb*_*mkb 13
让我们使用内置的 SqlDateTime 类
new SqlDateTime(DateTime.Now).ToSqlString()
Run Code Online (Sandbox Code Playgroud)
但仍然需要检查空值。这会抛出溢出异常
new SqlDateTime(DateTime.MinValue).ToSqlString()
Run Code Online (Sandbox Code Playgroud)
SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
正确答案已经给出了"使用参数".格式化日期并将其作为字符串传递给SQL-Server可能会导致错误,因为它取决于设置如何在服务器端解释日期.在欧洲,我们写"1.12.2012"表示2012年12月1日,而在其他国家,这可能被视为1月12日.
在SSMS中直接发布语句时,我使用的格式yyyymmdd看起来很一般.到目前为止,我没有遇到任何问题.
还有另一种很少使用的格式,这有点奇怪,但适用于所有版本:
select { d '2013-10-01' }
Run Code Online (Sandbox Code Playgroud)
将于2013年10月1日返回.
select { ts '2013-10-01 13:45:01' }
Run Code Online (Sandbox Code Playgroud)
将于10月1日下午1:45:01返回
我强烈建议使用参数,永远不要通过粘贴自己开发的格式化语句片段来格式化自己的SQL代码.它是SQL注入和奇怪错误的条目(格式化浮点值是另一个潜在的问题)
您的问题出在DateTime仅截断为日期的“日期”属性中。你可以像这样进行转换:
DateTime myDateTime = DateTime.Now;
string sqlFormattedDate = myDateTime.ToString("yyyy-MM-dd HH:mm:ss"); // <- No Date.ToString()!
Run Code Online (Sandbox Code Playgroud)