我是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);
答案 0 :(得分:2)
要获取当前日期,您需要指定您所在的时区。因此,根据时钟和时区,您可以使用:
LocalDate today = clock.Now.InZone(zone).Date;
虽然可以使用SystemClock.Instance
,但通常最好在代码中注入IClock
,这样您就可以轻松地进行测试。
请注意,在Noda Time 2.0中,这将更简单,使用ZonedClock
,它将只是:
LocalDate today = zonedClock.GetCurrentDate();
...但当然,您需要通过合并ZonedClock
和IClock
来创建 DateTimeZone
。基本面仍然相同,如果您在多个地方使用相同的区域,它会更方便一些。例如:
// These are IClock extension methods...
ZonedClock zonedClock = SystemClock.Instance.InTzdbSystemDefaultZone();
// Or...
ZonedClock zonedClock = SystemClock.Instance.InZone(specificZone);