Java 部分日期的Joda边界日期

Java 部分日期的Joda边界日期,java,date,jodatime,Java,Date,Jodatime,我正在开发一个java组件,该组件使用日期窗口标记事件,用于按天、周、月等聚合度量 从一个日期到它的聚合类别的映射是很简单的——只需将格式设置为字符串,并为所需的窗口使用适当的模式即可。例如,可以使用“%1$04tY-%1$02tm”(即YYYY-MM)将日期映射到月级聚合 我的问题是从窗口到其边界日期的反向映射,例如从聚合月份2012-02到其边界日期2012-02-01和2012-03-01(使用半开放间隔)。我需要它来用一条语句有效地标记我的数据存储(MongoDB)中的整个日期跨度(为了

我正在开发一个java组件,该组件使用日期窗口标记事件,用于按天、周、月等聚合度量

从一个日期到它的聚合类别的映射是很简单的——只需将格式设置为
字符串
,并为所需的窗口使用适当的模式即可。例如,可以使用
“%1$04tY-%1$02tm”
(即
YYYY-MM
)将日期映射到月级聚合

我的问题是从窗口到其边界日期的反向映射,例如从聚合月份
2012-02
到其边界日期
2012-02-01
2012-03-01
(使用半开放间隔)。我需要它来用一条语句有效地标记我的数据存储(MongoDB)中的整个日期跨度(为了清晰起见,本例省略了
ISODate(…)
):

我偶然发现并怀疑它的API可能支持此功能。我试着自学,但有人已经知道怎么做了吗

我建议使用

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

localdatelowerbound=新的LocalDate(年、月、1)

那么,上界是

LocalDate upperBound = lowerBound.plusMonths(1)

乔达时间绝对是实现这一目标的最佳途径

根据您想要对时区执行的操作,下面显示了我认为您想要的操作

    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

缺少的片段正在解析字符串中的部分,但我收集到Joda中尚未实现这一点:
    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);