2011-10-09 76 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。

相关问题