【问题标题】:How to get the time duration from subtracting two times如何从减去两次中获得持续时间
【发布时间】:2016-12-29 17:01:13
【问题描述】:

我有包含(登录和注销)时间和日期的 userTransact 表,现在我使用这些代码来计算持续时间,但问题是它的子日期也给了我无效的日期,如下所示:
登录 2016-12-22 08:28:27.540
注销 2016-12-22 08:28:32.947
持续时间 1900-01-01 00:00:05.407
如何解决这个问题?
此计算的代码在 FormClosing 事件中为:

SqlCommand cmd3 = new SqlCommand("insert into empTransLogin(empLogTransNo,empId,logTimeIn,logTimeOut,duration) VALUES (@logTrans,@id,@login,@logout,@duration)", cn);
cmd3.Parameters.AddWithValue("@logTrans", x);
cmd3.Parameters.AddWithValue("@id", deleteById);
cmd3.Parameters.AddWithValue("@login", loginDateTime);
cmd3.Parameters.AddWithValue("@logout", DateTime.Now);
TimeSpan duration = DateTime.Now - loginDateTime;
cmd3.Parameters.AddWithValue("@duration", duration);
cmd3.ExecuteNonQuery();
SqlCommand cmd2 = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn);
cmd2.ExecuteNonQuery();
Application.Exit();  

【问题讨论】:

  • duration 应该怎么看?当您执行 logout-login 时,您将获得 TimeSpan ,您可以从中获得持续时间(以秒为单位)、抽动或您想要的任何内容
  • 请不要使用AddWithValue。很可能会产生问题:Best Practices - Executing Sql Statements.
  • @Tima'aTamim 这不是持续时间。你误解了这个概念。
  • 持续时间应该是从登录之日起已经过期的时间。因此,您应该考虑更改存储 duration 的参数。只需保持几秒钟
  • 你真的需要存储持续时间吗?除非您根据持续时间进行查询,例如查找最长或最短登录时间,否则最好不要存储该列。

标签: c# winforms datetime duration


【解决方案1】:
SqlCommand cmd3 = new SqlCommand("insert into empTransLogin(empLogTransNo,empId,logTimeIn,logTimeOut,duration) VALUES (@logTrans,@id,@login,@logout,@duration)", cn);
cmd3.Parameters.AddWithValue("@logTrans", x);
cmd3.Parameters.AddWithValue("@id", deleteById);
cmd3.Parameters.AddWithValue("@login", loginDateTime);
cmd3.Parameters.AddWithValue("@logout", DateTime.Now);
TimeSpan duration = DateTime.Now - loginDateTime;
cmd3.Parameters.AddWithValue("@duration", duration.TotalSeconds);
cmd3.ExecuteNonQuery();
SqlCommand cmd2 = new SqlCommand("delete from empLogin where empId=" + deleteById + "", cn);
cmd2.ExecuteNonQuery();
Application.Exit();  

请注意 TotalSeconds 不是整数值。

【讨论】:

  • 我的代码中的时间完全确定了问题在于日期查看持续时间 1900-01-01 00:00:05.407
  • 您在数据库中保存的 Duration 类型是什么?由于持续时间不是日期类型,您如何通过年、月等获得此值?
  • 类型为数据库中的日期时间
  • 将其存储为秒。你得到这个奇怪的值是因为你试图将时间跨度放入日期时间,这不是真正可比较的类型。
  • 我将 datetime 数据类型更改为仅时间,我得到了这个结果 login 09:26:54.8600000 logout 09:27:01.0030000 duration 00:00:06.1423513
猜你喜欢
  • 2016-07-13
  • 1970-01-01
  • 2016-02-24
  • 1970-01-01
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2015-03-16
相关资源
最近更新 更多