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