在我的C#项目中,我需要系统日期时间到另一个特定的日期时间格式。
我的系统日期时间格式类似于"15/03/2017 9:25 AM"
--->可根据我的程序运行的计算机进行更改。
但我需要将该日期时间格式解析为另一种日期时间格式,例如" 2017-03-15 9:25 AM" ---->在SQL datebase中保存日期仅接受此格式。
我需要将此变量赋值给Datetime变量,不需要保存在String变量中。
我试过这段代码但没有工作
string datetimesss = DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss")
返回
// value of datetimesss="2017-03-15 09:33:25"
然后我再次解析日期时间格式
DateTime dates = DateTime.Parse(datetimesss);
返回
// value of dates ="15/03/2017 9:42:43 AM"
转换回我的计算机日期时间格式。如何将任何日期时间格式转换为DateTime "yyyy-MM-dd hh:mm:ss"
谢谢!
答案 0 :(得分:2)
您应该避免字符串,并将数据保存在DateTime
个变量中。 ADO.Net已经知道如何在.NET DateTime
和SQL Server datetime
之间进行转换 - 这些都没有格式(两者都在内部,只是数字。从01/01/0001开始,.NET DateTime
是100ns间隔的计数.SQL Server的datetime是自01/01/1900以来的整数和小数天数。
类似的东西:
var updateCommand = new SqlCommand(
"UPDATE [User] SET Last_loign_date =@LastLoginDate"
,conn); //Assume conn is an SqlConnection object
updateCommand.Parameters.Add("@LastLoginDate",SqlDbType.DateTime).Value = DateTime.Now
或者,替代方案,为什么不使用数据库服务器时间而不是传递它:
string sqlupdatepassword = "UPDATE [User] SET Last_loign_date =current_timestamp";
答案 1 :(得分:1)
如果sql server语言设置为us-english,那么你的日期 - > ' 15/03/2017 9:25 AM'将被视为文本并转换为日期将不会给出正确的结果。您需要使用字符串函数根据给定日期的日,月和年创建日期。使用以下代码获取所需的输出:
declare @date varchar(30) = '15/03/2017 9:25 AM'
select cast(left(parsename(replace(@date,'/','.'),1),4) +
parsename(replace(@date,'/','.'),2) +
parsename(replace(@date,'/','.'),3) as datetime) +
ltrim(stuff(parsename(replace(@date,'/','.'),1),1,4,''))
答案 2 :(得分:0)
最后我明白了这一点, 我将DateTime解析为String
string sqlupdatepassword = "UPDATE [User] SET Last_loign_date ='" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss tt") + "'";
在SQl数据库中,“Last_loign_date”是日期时间格式。 这可能不正确,但这对我有用。
谢谢!