【问题标题】:Joda bounding dates for partial date部分日期的 Joda 边界日期
【发布时间】:2012-03-08 09:04:35
【问题描述】:

我正在开发一个 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 可能支持此功能。我正在尝试自学,但是有人已经知道如何做到这一点了吗?

【问题讨论】:

    标签: java date jodatime


    【解决方案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

    【讨论】:

    【解决方案2】:

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

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

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

    那么,上界就是

    LocalDate upperBound = lowerBound.plusMonths(1)
    

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 2014-08-08
      • 2011-09-02
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多