在一个函数中,我需要找到两个日期之间的差异,以秒为单位。如果差异超过30秒,则返回 False ,否则返回 True ,第一个从数据库读取,第二个是当前DateTime.Now
以下是我正在使用的最常用的代码,dr.GetValue(0).ToString()
保存数据库中的当前值:
if (dr.Read())
{
DateTime nowDate = Convert.ToDateTime(DateTime.Now.ToString("M/dd/yyyy H:mm:ss tt"));
DateTime then = DateTime.ParseExact(dr.GetValue(0).ToString(), "M/dd/yyyy H:mm:ss tt", CultureInfo.InvariantCulture);
TimeSpan diff = nowDate - then;
int timeDifference = diff.Seconds;
if (timeDifference > 30)
{
myConn.Dispose();
return false;
}
else {
myConn.Dispose();
return true;
}
}
当我执行上面的代码时,我收到一条消息错误:
string was not recognized as valid DateTime
以下是导致错误的行:
DateTime then = DateTime.ParseExact(dr.GetValue(0).ToString(), "M/dd/yyyy H:mm:ss tt", CultureInfo.InvariantCulture);
时间以这种格式存储在数据库中:2013-02-18 14:06:37
但是当我执行以下行时(出于调试目的):
MessageBox.Show(dr.GetValue(0).ToString());
我看到一个消息框,以此格式显示日期:2/18/2013 2:06:37 PM
如何找到当前时间与dr.GetValue(0)中存储的时间之间的差异.ToString()
任何帮助都将受到高度赞赏
答案 0 :(得分:3)
您需要h
,而不是H
。 h
是12小时格式的小时,H
是24小时格式的小时。由于您的示例时间为2 PM
(不是14 PM
),因此您需要12小时格式。
此外:
Seconds
而不是TotalSeconds
- 这是不正确的,因为例如60秒的时间段Seconds
值为0
。DateTime nowDate = DateTime.Now;
DateTime then = DateTime.ParseExact(
dr.GetValue(0).ToString(), "M/dd/yyyy h:mm:ss tt",
CultureInfo.InvariantCulture);
TimeSpan diff = nowDate - then;
double secondsDifference = diff.TotalSeconds;
你甚至可以按照
的方式做点什么DateTime then = dr.GetDateTime(0);
并完全避免字符串解析,但H
/ h
差异是您获得所询问的特定异常的原因。
答案 1 :(得分:1)
如果看起来像你的日期是数据库中的日期时间,你可以简化这两行:
DateTime nowDate = DateTime.Now;
DateTime then = (DateTime)dr.GetValue(0);
(虽然我在这里做了很多假设)
答案 2 :(得分:1)
您的代码应该非常简单:
if (dr.Read())
{
DateTime then = dr.GetDateTime(0);
TimeSpan diff = DateTime.Now - then;
int timeDifference = diff.TotalSeconds;
}
有一点需要注意 - 您真的不应该在myConn.Dispose();
中致电if/else
。用using
声明包裹您的连接和读者。
答案 3 :(得分:0)
我认为你的服务器有应用服务器有其他一些日期格式设置。您可以尝试的是:
Convert.ToDate(value,System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormate);
希望这会解决错误。但是没有测试它,所以希望最好