【问题标题】:JodaTime version1.2 Calculate daysJoda Time 1.2 版计算天数
【发布时间】:2013-04-03 19:59:36
【问题描述】:

我需要弄清楚如何使用 joda time 1.2 计算两个日期之间的天数(不,我不能使用更新的版本)。所以 Days 类还不存在。

我可以持续数周和数天

(period.getWeeks()*7 + period.getDays());

但是当涉及到月份时,它们都有不同的天数,所以我不能做 period.getMonths()*30。

编辑: 我也可以

(today.getDayOfYear() - oldDate.getDayOfYear());

但是当日期在不同年份时就会出现问题

谢谢

【问题讨论】:

    标签: java jodatime


    【解决方案1】:

    看看乔达时间source codeDaysdaysBetween方法定义为:

    public static Days daysBetween(ReadableInstant start, ReadableInstant end) {
        int amount = BaseSingleFieldPeriod.between(start, end, DurationFieldType.days());
        return Days.days(amount);
    }
    

    BaseSingleFieldPeriod 和 Days 一样,在 Joda Time 1.2 中不可用,但是查看 1.2 中可用的 source 类开始出现:

    protected static int between(ReadableInstant start, ReadableInstant end, DurationFieldType field) {
        if (start == null || end == null) {
            throw new IllegalArgumentException("ReadableInstant objects must not be null");
        }
        Chronology chrono = DateTimeUtils.getInstantChronology(start);
        int amount = field.getField(chrono).getDifference(end.getMillis(), start.getMillis());
        return amount;
    }
    

    所有这些类和方法都在 Joda Time 1.2 中可用,因此计算两个实例之间的天数类似于:

    public static int daysBetween(ReadableInstant oldDate, ReadableInstant today) {
        Chronology chrono = DateTimeUtils.getInstantChronology(oldDate);
        int amount = DurationFieldType.days().getField(chrono).getDifference(today.getMillis(), oldDate.getMillis());
        return amount;
    }
    

    【讨论】:

    • 就像一个魅力,非常感谢,也解释了如何找到它
    猜你喜欢
    • 2017-03-06
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2013-05-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    相关资源
    最近更新 更多