2013-02-18 202 views
0

函數內部,我需要在幾秒鐘內找到兩個日期之間的差異。如果差值超過30秒,我回到否則返回,我第一個從數據庫中讀取它,第二個是當前DateTime.Now無法將字符串轉換爲DateTime?

這裏是snippest的代碼,我使用該做的工作,而dr.GetValue(0).ToString()保存數據庫中的當前值:
string was not recognized as valid DateTime

和:

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; 
       } 
      } 

當我在上面,我得到一個消息,錯誤執行代碼這裏是導致該錯誤的行:

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

如何找到CURR之間以秒之差耳鼻喉科時間和存儲在dr.GetValue(0)的ToString(時間)

任何幫助將高度讚賞

+0

你爲什麼使用'DateTimes'字符串?使用參數。 – 2013-02-18 14:35:50

+4

你爲什麼要將'DateTime.Now'轉換成一個字符串,然後轉換回'DateTime'?你爲什麼不從數據庫查詢中返回一個'DateTime'? – 2013-02-18 14:36:15

+0

不是你的數據庫中的日期時間,好吧,日期時間? – baldric 2013-02-18 14:37:03

回答

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不同的是,你得到的原因具體的例外,你問。

0

我認爲你的服務器有應用程序服務器有一些其他的日期格式集。你可以試試這個:

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

希望這將解決該錯誤。沒有測試它因此希望獲得最佳

1

如果,因爲它看起來像,你的日期是在數據庫中的日期時間,你也許可以簡化兩行這樣的:

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

(雖然我中號做了很多假設這裏)

1

你的代碼真的應該很簡單:

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

需要注意的一點 - 你真的不應該在你的來調用。將您的連接和閱讀器封裝在using聲明中。