野田时间日期比较

时间:2015-01-29 15:26:41

标签: date datetime nodatime

我是Noda Time的新手,我基本上想要比较日期是否已过期。在我的情况下,我有一个对象,其中date已创建,由LocalDate表示,months的有效量为int,所以我想做一个简单的:

if ( Now > (dateCreated + validMonths) ) expired = true;

但是我在Noda Time文档中找不到正确的方法来获取现在日期(它们只显示如何将现在时间设为SystemClock.Instance.Now)和正确的方法处理时间比较

例如,如果今天是2015年1月1日,并且该文件是在2014年12月1日创建的,并且有效期为一个月,则今天它的有效期为一个月。

我想念isBefore()isAfter()等方法来比较日期和时间。 <简单过载< >运营商也可能非常有帮助。


编辑:

1 - 抱歉,有< >个运营商来比较日期。

2 - 我使用此代码解决了我的问题(尚未测试!):

...
LocalDate dateNow = this.clock.Now.InZone(DateTimeZoneProviders.Tzdb.GetSystemDefault()).LocalDateTime.Date;
LocalDate dateExpiration = DataASO.PlusMonths(validity);
return (dateNow < dateExpiration);

1 个答案:

答案 0 :(得分:2)

要获取当前日期,您需要指定您所在的时区。因此,根据时钟和时区,您可以使用:

LocalDate today = clock.Now.InZone(zone).Date;

虽然可以使用SystemClock.Instance,但通常最好在代码中注入IClock,这样您就可以轻松地进行测试。

请注意,在Noda Time 2.0中,这将更简单,使用ZonedClock,它将只是:

LocalDate today = zonedClock.GetCurrentDate();

...但当然,您需要通过合并ZonedClockIClock创建 DateTimeZone。基本面仍然相同,如果您在多个地方使用相同的区域,它会更方便一些。例如:

// These are IClock extension methods...
ZonedClock zonedClock = SystemClock.Instance.InTzdbSystemDefaultZone();

// Or...
ZonedClock zonedClock = SystemClock.Instance.InZone(specificZone);