在C#中将DateTime格式转换为另一个DateTime格式

时间:2017-03-15 04:18:23

标签: c# sql-server datetime

在我的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"

谢谢!

3 个答案:

答案 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”是日期时间格式。 这可能不正确,但这对我有用。

谢谢!