野田时间日期比较
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();
...但是您当然需要通过组合 IClock
和 DateTimeZone
来 创建 一个 ZonedClock
。基本原理仍然相同,如果您在多个地方使用同一个区域会更方便一些。例如:
// These are IClock extension methods...
ZonedClock zonedClock = SystemClock.Instance.InTzdbSystemDefaultZone();
// Or...
ZonedClock zonedClock = SystemClock.Instance.InZone(specificZone);
我是 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();
...但是您当然需要通过组合 IClock
和 DateTimeZone
来 创建 一个 ZonedClock
。基本原理仍然相同,如果您在多个地方使用同一个区域会更方便一些。例如:
// These are IClock extension methods...
ZonedClock zonedClock = SystemClock.Instance.InTzdbSystemDefaultZone();
// Or...
ZonedClock zonedClock = SystemClock.Instance.InZone(specificZone);