2017-02-14 223 views
0

我可以發誓,這是工作前兩天,現在它拋出一個異常...問題與日期時間

我在DataTable檢查,對一些數據。我基本上是在計算在過去15分鐘內發現某個eventID的次數。下面是代碼:

int startevents = trackingData 
    .Select("RHEventID = 3 AND RHDateEvent > #" + now + "#").Length; 

我定義之前剛纔說的「現在」變量 - 是這樣的:

DateTime now = DateTime.Now.AddMinutes(-15); 

但是,這將引發一個字符串未被識別爲有效的DateTime例外。下面是在數據表中的數據的一個例子,在RHDateEvent列:

2017年2月14日十三時58分27秒下午 (編輯 - 是的,這是唯一一個日期,而不是兩個,在列)

那麼我在做什麼錯了?我需要以某種方式轉換此DateTime嗎?

+0

看(https://msdn.microsoft.com/en -us/library/w2sa9yss(v = vs.110).aspx) –

+6

DataTable中的單個列有兩個日期嗎? –

+1

使用「#」作爲日期的分隔符可能存在問題。你是否在日期周圍試過單引號。我假設您在輸出測試數據時顯示兩個數據示例,而不是一個包含兩個日期的日期字段。 – MikeS

回答

2

我d真的推薦使用Linq-To-DataTable,而不是舊的和有限的Select方法:

DateTime in15minutes = DateTime.Now.AddMinutes(15); 
var matchingRows = from row in trackingData.AsEnumerable() 
        where row.Field<int>("RHEventID) == 3 
        && row.Field<DateTime>("RHDateEvent") > in15minutes 
        select row; 

,如果你現在只需要計數使用:

int matchingRowCount = matchingRows.Count(); 

這是更具可讀性,功能強大,支持編譯時的安全性。


如果你的列是不是一個DateTime - 但string -column你需要分析它:在[這]

... 
&& DateTime.Parse(row.Field<string>("RHDateEvent"), CultureInfo.InvariantCulture) > in15minutes 
+0

謝謝蒂姆 - 這看起來不錯,只是它在'in15minutes'變量上拋出一個錯誤,而' - 指定的轉換無效'。有任何想法嗎? – reviloSlater

+0

@reviloSlater:那麼似乎'RHDateEvent'列不是'DateTime'列,而是f.e.一個'字符串'。那麼你需要將它解析爲'DateTime'。它有什麼格式?這:'2017-02-14 13:58:27 PM'? –

+0

@reviloSlater:編輯我的答案,告訴你如何 –

0

它看起來像日期時間被複制......

2017-02-14 13:58:27 PM 2017-02-14 13:57:27 PM

代替

2017-02-14 13:58:27 PM

0

如果是LINQ到實體使用

var startevents = trackingData.Where(e => e.RHEventId = 3 && e.RHDateEvent >= DateTime.Now.AddMinutes(-15)).Count(); 
+0

爲什麼使用簡單的方法? Challange !!!在哪裏? – Lucas

+0

我知道*嘆*,我多麼懶! –