Joda ограничивающие даты для частичной даты - PullRequest
0 голосов
/ 08 марта 2012

Я работаю над Java-компонентом, который помечает события окном даты для агрегирования метрик по дням, неделям, месяцам и т. Д.

Отображение даты в ее совокупную категорию является простым - просто отформатируйте String, используя соответствующий шаблон для нужного окна. Например, дата может быть сопоставлена ​​с агрегацией на уровне месяца с шаблоном Formatter "%1$04tY-%1$02tm" (т.е. YYYY-MM).

Моя проблема заключается в обратном сопоставлении окна с его ограничивающими датами, например, от совокупного месяца 2012-02 до его ограничивающих дат 2012-02-01 и 2012-03-01 (с использованием полуоткрытых интервалов). Мне нужно это, чтобы эффективно пометить целые промежутки дат в моем хранилище данных (MongoDB) одним оператором (в этом примере для ясности пропущен ISODate(…)):

db['events'].update( 
    {eventDate: {$gte: "2012-02-01", $lt: "2012-03-01"}, 
    {$set: {month: "2012-02"}
);

Я столкнулся с Joda-Time и подозреваю, что его Partial API может поддерживать эту функцию. Я пытаюсь научить себя, но кто-нибудь уже знает, как это сделать?

Ответы [ 2 ]

1 голос
/ 08 марта 2012

Joda-Time - определенно способ для этого.

В зависимости от того, что вы хотите сделать с часовыми поясами, следующее показывает, что я думаю, вы хотите.

    YearMonth ym = new YearMonth(2012, DateTimeConstants.MARCH);
    Interval interval = ym.toInterval();
    LocalDate monthStart = interval.getStart().toLocalDate();
    LocalDate monthEnd = interval.getEnd().toLocalDate();

    System.out.println("Start:" + monthStart);
    System.out.println("End: " + monthEnd);

Примечание: для этого требуется как минимум Joda-Time v2.0

0 голосов
/ 08 марта 2012

Я бы предложил использовать http://joda -time.sourceforge.net / api-release / org / joda / time / LocalDate.html

Вы можете построить нижнюю границу, проанализировав год и месяц из окна, а затем

LocalDate lowerBound = new LocalDate(year, month, 1)

Тогда верхняя граница равна

LocalDate upperBound = lowerBound.plusMonths(1)
...