2012-02-16 51 views
7

Tôi cần kiểm tra xem ngày tháng (trong chuỗi) có tồn tại trong danh sách mảng hay không.Tạo phạm vi ngày trong JodaTime

Tôi có hai ngày, trước tiên tôi cần phải tạo phạm vi ngày giữa hai ngày này và lưu trữ chúng trong một Mảng. Đây là những gì tôi đang làm.

DateTimeFormatter dateFromatter= DateTimeFormat.forPattern("MM/dd/yyyy"); 

DateTime startDate= formatter.parseDateTime("01/02/2012"); 
DateTime endDate= formatter.parseDateTime("01/31/2012"); 

List<LocalDate> dates = new ArrayList<LocalDate>(); 


    int days = Days.daysBetween(startDate, endDate).getDays(); 
    for (int i=0; i < days; i++) { 

Đây là nơi tôi đang gặp sự cố.

Type mismatch: cannot convert from DateTime to LocalDate 

> LocalDate listOfDates = 
> startDate.withFieldAdded(DurationFieldType.days(), i); 
> dates.add(listOfDates); 

    } 

Trả lời

11

Sử dụng org.joda.time.Interval

Interval interval = new Interval(startDate, endDate); 
for (LocalDate date : dates) 
{ 
    if (interval.contains(date)) 
    // 
+2

Điều này không chính xác vì ngày LocalDate 'chỉ là một ReadablePartial không phải là ReadableInstant. Bạn _could_ tạo một khoảng thời gian bằng cách sử dụng startDate và endDate (đó là DateTimes) và sau đó kiểm tra nếu date.toDateMidnight() là trong khoảng thời gian, nhưng hãy cẩn thận với endDate vì nó là độc quyền trong một khoảng thời gian. –

4

Không toLocalDate() có hoạt động không?

LocalDate listOfDates = 
    startDate.withFieldAdded(DurationFieldType.days(), i).toLocalDate(); 

Dù sao, bạn có thực sự cần tạo mỗi ngày không? Trừ khi tôi thực sự cần, tôi sẽ chỉ làm điều gì đó tương tự như sau:

Interval interval = new Interval(startDate.withTimeAsStartOfDay(), 
           endDate.withTimeAsStartOfDay().plusDays(1)); 
boolean isInInterval = interval.contains(date.withTimeAsStartOfDay()); 
2

Tôi đến đây tìm kiếm này, nhưng không phải giải pháp có thể chấp nhận để tôi - Tôi đã kết thúc với những điều sau:

int days = Days.daysBetween(startDate, endDate).getDays(); 

for(int i = 0; i <= days; i++) { 
    dates.add(startDate.plusDays(i)); 
} 

Lưu ý rằng LocalDates không thay đổi nên bạn không thực sự thay đổi khi bạn gọi plusDays (...). Cũng lưu ý rằng tôi sử dụng < = để bao gồm ngày cuối cùng (trong ví dụ của bạn, đây là ngày 31 tháng 1).

Các vấn đề liên quan