我在SQL Server中有一个数据类型为Datetime的字段。我只是选择日期
select impDate from tbl1
发生了什么 - 上午/下午部分不一致...请参阅图片
可以看出 - 它似乎适用于12:00以下的所有东西,直到它到达12:59 - 此时每小时被识别为AM - 当2:46和3:17应该是PM 。
这就是sql server中的样子......
2016-10-18 10:25:16.000
编辑:
DateTime.Now.ToString(" MM / dd / yyyy hh:mm:ss")
答案 0 :(得分:4)
我将根据问题中的信息猜测您使用hh
来检索当前日期和时间的字符串值来检索12小时格式的小时数。如果你使用字符串连接来构建你的sql(非常糟糕,你应该使用参数)这可以解释这个问题。
但是,修复不是使用军事时间来插入日期,而是使用参数化查询并将DateTime实例直接传递给参数的值。
以下是如何使用参数来避免将来出现此类问题的快速示例。
Public Function SomeFunction(ByVal dateToInsert As DateTime)
Dim sql As String = "INSERT INTO tbl1 (impDate) VALUES(@impDate)"
Using cn As New SqlConnection("Your connection string here"), _
cmd As New SqlCommand(sql, cn)
cmd.Parameters.Add("@impDate", SqlDbType.DateTime).Value = dateToInsert
cmd.ExecuteNonQuery()
End Using
End Function
答案 1 :(得分:3)
// standard (must provide AM/PM, AM assumed if not explicitly provided)
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss");
VS
// military (24 hour clock)
DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss");
考虑到更重要的一点是,您不应该将strings
插入datetime
,您应该插入datetimes
。您的ToString()
暗示您正在插入数据库,这是问题源自的地方。
保持数据类型正确的数据类型,这将消除此问题。