2015-01-29 2 views
1

나는 Noda Time에 처음있어 기본적으로 만료 날짜가 맞는지 비교하고 싶습니다. 내 경우에는 내가 LocalDate과는 int으로 유효한의 months의 양으로 표시가 생성 된 date와 객체를 가지고, 그래서 간단하고 싶었던 :노다 시간 날짜 비교

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

을하지만 난 찾을 수 없습니다 노다 시간 문서에 Now Date (지금은 SystemClock.Instance.Now으로 Now 시간을 얻는 방법 만 보여줍니다) 및 시간 비교을 처리하는 적절한 방법을 얻는 적절한 방법을 얻으십시오.

예를 들어 오늘이 2015 년 1 월 1 일이고 문서가 2014 년 12 월 1 일에 작성되었으며 한 달 동안 유효하면 오늘은 한 달 유효 기간이 만료됩니다.

날짜와 시간을 비교하려면 isBefore()isAfter()과 같은 메소드가 누락되었습니다. <> 연산자의 간단한 과부하 또한 매우 유용 할 수 있습니다.


편집 :

1 - 죄송합니다, 날짜를 비교하기 <> 사업자가 있습니다. (! 아직 테스트하지). -

이이 코드를 사용하여 내 문제를 해결 :

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

여기서 'dateCreated'와 'validTime'은 무엇입니까? 'dateCreated'가'Instant' (즉, 무언가가 만들어 졌을 때의 타임 스탬프)이고'validTime'이 지속 시간 (예 : 24 시간)이면 꽤 괜찮을 것입니다 ... –

+0

저는 dateCreated를 a로 모델링했습니다. 이 객체가 유효한 달을 나타내는 정수로 LocalDate와 validTime – mFeinstein

+0

이 경우'dateCreated.PlusMonths (validTime)'을 사용하여 새로운'LocalDate'를 얻어야합니다. 그럼 내 대답을 참조하십시오 ... –

답변

1

는 현재 날짜를 얻으려면, 당신은에있어 어느 시간대 지정해야합니다 그래서 시계 주어 시간대, 당신은 사용하십시오 : 당신이 SystemClock.Instance를 사용할 수 있지만

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

, 그것은 코드 내로 IClock를 주입하기 위해 일반적으로 더 나은, 당신은 쉽게 테스트 할 수 있도록. 노다 시간 2.0이 그냥 될 것 ZonedClock를 사용하여 간단하게 될 것이다하는 것으로

:

LocalDate today = zonedClock.GetCurrentDate(); 

...하지만 물론 당신은을 결합하여ZonedClock을 만들 해야합니다 IClockDateTimeZone. 기본은 여전히 ​​동일합니다. 여러 지역에서 동일한 영역을 사용하는 경우 조금 더 편리합니다. 예 :

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

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