无法将字符串转换为DateTime?

时间:2013-02-18 14:34:20

标签: c# .net datetime

在一个函数中,我需要找到两个日期之间的差异,以秒为单位。如果差异超过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 个答案:

答案 0 :(得分: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差异是您获得所询问的特定异常的原因。

答案 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);

希望这会解决错误。但是没有测试它,所以希望最好