2011-10-09 99 views
22

如何檢查當前日期是否已過去20分鐘?日期比較 - 如何檢查20分鐘是否已過?

例如:

var start = DateTime.Now; 
var oldDate = "08/10/2011 23:50:31"; 

    if(start ??) { 
    //20 minutes were passed from start 
    } 

什麼是做到這一點的最好方法是什麼? 謝謝:)

+0

您可能希望使用'DateTime.UtcNow'而不是'DateTime.Now'來避免時鐘跳躍或轉發時夏時制變化的問題。 –

+2

@Hightechrider:使用'UtcNow'只有在比較時間戳爲UTC時纔有用! – Gabe

+1

@Gabe,顯然是的,但將開始時間轉換爲UTC並比較它會比'DateTime.Now'更好,因爲否則您可以得到一個小時似乎已經過去的情況! –

回答

52
  1. 您應該在開始時間轉換爲UTC時間,說 '開始'。
  2. 現在你可以使用你的啓動時間比較當前UTC時間:

    start.AddMinutes(20) > DateTime.UtcNow

這種方法意味着你會得到解決夏令時更改正確的答案。

通過增加時間到開始時間,而不是減去並比較TimeSpan上的總時間,您的語法更具可讀性,並且您可以處理更多的日期差異情況,例如,從一開始1個月,從一開始2周,...

+2

+1用於教授合乎邏輯但對我來說不是不言而喻的事情。我也喜歡更可讀的語法提示。 –

+0

看起來是最好的方式,我試試這個。 –

+0

這是否改變了實際的物體。例如如果你把它存儲在內存中,它會永久增加20分鐘嗎? 在這種情況下,從DateTime中刪除20分鐘會更有意義。UtcNow,因爲這是一個構造函數 –

5

oldDate解析爲DateTime對象(DateTime.Parse)。

start中減去解析日期。這將返回TimeSpan

檢查TotalMinutes

+2

+1這個答案比我的好。我忘了TotalMinutes ...這個答案可以防止不必要的第二個TimeSpan。 –

+2

個人而言,我更喜歡'start.AddMinutes(20)> now',因爲它表示「自開始以來超過20分鐘已經過去」。此外,您可以使用它來測試使用TimeSpan無法輕鬆完成的周,月,年測量間隔。 –

4
var start = DateTime.Now; 
var oldDate = DateTime.Parse("08/10/2011 23:50:31"); 

    if(start.Subtract(oldDate) >= TimeSpan.FromMinutes(20)) 
    { 
    //20 minutes were passed from start 
    } 
0
var end = DateTime.Parse(oldDate); 
if (start.Hour == end.Hour && start.AddMinutes(20).Minute >= end.Minute) 
+0

如果小時通過,這不起作用。 開始='​​23:20'結束='24:20'這是真的。 –

4
var start = DateTime.Now; 
var oldDate = DateTime.Parse("08/10/2011 23:50:31"); 

if ((start - oldDate).TotalMinutes >= 20) 
{ 
    //20 minutes were passed from start 
} 
+0

如果小時合格,這不起作用。 開始='​​23:20'結束='24:20'這是真的。 –

+0

¿爲什麼你會以24:20的時間發送?在這種情況下,您應該使用TimeSpan對象,而不是DateTime,DateTime對象旨在用於有效的時間表示,而不是「24:20」 –

1

我能夠在我的項目使用JodaTime庫來實現這一目標。我拿出這個代碼。

String datetime1 = "2012/08/24 05:22:34"; 
String datetime2 = "2012/08/24 05:23:28"; 

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy/MM/dd HH:mm:ss"); 
DateTime time1 = format.parseDateTime(datetime1); 
DateTime time2 = format.parseDateTime(datetime2); 
Minutes Interval = Minutes.minutesBetween(time1, time2); 
Minutes minInterval = Minutes.minutes(20); 

if(Interval.isGreaterThan(minInterval)){ 
    return true; 
} 
else{ 
    return false; 
} 

這將檢查datetime1和datetime2之間的時間間隔是否大於20分鐘。將該屬性更改爲秒。你會更容易知道。這將返回false。

相關問題