Joda约会日期为部分日期

时间:2012-03-07 23:53:56

标签: java date jodatime

我正在研究一个java组件,该组件使用日期窗口标记事件,以按天,周,月等汇总度量标准。

从日期到其聚合类别的映射很简单 - 只需使用适当的模式为所需窗口格式化为String。例如,可以使用Formatter pattern "%1$04tY-%1$02tm"(即 YYYY-MM )将日期映射到月级聚合。

我的问题是从窗口到其边界日期的反向映射,例如从汇总的月份2012-02到其边界日期2012-02-012012-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 个答案:

答案 0 :(得分:1)

Joda-Time绝对是最佳选择。

根据您对TimeZones的处理方式,以下显示了我认为您想要的内容。

    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

答案 1 :(得分:0)

我建议使用http://joda-time.sourceforge.net/api-release/org/joda/time/LocalDate.html

您可以通过从窗口解析年份和月份来构建下限, 然后

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

然后,上限是

LocalDate upperBound = lowerBound.plusMonths(1)