野田时间日期比较

Noda Time Date Comparison

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

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

但我在 Noda Time 文档中找不到获取 Now Date 的正确方法(他们只显示如何获取 Now 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);

要获取当前日期,您需要指定您所在的时区。因此,给定一个时钟和一个时区,您将使用:

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

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

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

LocalDate today = zonedClock.GetCurrentDate();

...但是您当然需要通过组合 IClockDateTimeZone 创建 一个 ZonedClock。基本原理仍然相同,如果您在多个地方使用同一个区域会更方便一些。例如:

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

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