0

在函数内部,我需要在 seconds 中找到 2 个日期之间的差异。如果差异超过 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() 中的时间之间的秒差

任何帮助将不胜感激

4

4 回答 4

3

你想要h,没有Hh是 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差异是您得到您询问的特定异常的原因。

于 2013-02-18T14:37:15.767 回答
1

如果看起来像您的日期是数据库中的日期时间,您可以将这两行简化为:

DateTime nowDate = DateTime.Now;
DateTime then = (DateTime)dr.GetValue(0);

(虽然我在这里做了很多假设)

于 2013-02-18T14:41:51.447 回答
1

你的代码真的应该很简单:

if (dr.Read())
{
    DateTime then = dr.GetDateTime(0);
    TimeSpan diff = DateTime.Now - then;
    int timeDifference = diff.TotalSeconds;
}

需要注意的一件事 - 你真的不应该打电话给myConn.Dispose();你的if/else. 将您的联系和读者包装在一份using声明中。

于 2013-02-18T14:44:27.977 回答
0

我认为您的服务器有应用程序服务器设置了其他日期格式。您可以尝试的是:

Convert.ToDate(value,System.Globalization.CultureInfo.GetCultureInfo("en-US").DateTimeFormate);

希望这将解决错误。尚未测试,所以希望最好

于 2013-02-18T14:39:30.990 回答