java - 两个 Joda DateTime 之间的差异(以月为单位)和剩余天数

标签 java android jodatime period date-difference

我需要获取两个 DateTime 对象之间的月数,然后获取剩余的天数。

以下是我获取月份之间的方法:

月份monthsBetween = Months.monthsBetween(dateOfBirth,endDate);

我不确定如何找出下个月还剩多少天。我尝试过以下方法:

int offset = Days.daysBetween(dateOfBirth,endDate)
              .minus(monthsBetween.get(DurationFieldType.days())).getDays();

但这并没有达到预期的效果。

最佳答案

使用 org.joda.time.Period :

// fields used by the period - use only months and days
PeriodType fields = PeriodType.forFields(new DurationFieldType[] {
        DurationFieldType.months(), DurationFieldType.days()
    });
Period period = new Period(dateOfBirth, endDate)
    // normalize to months and days
    .normalizedStandard(fields);

需要进行标准化,因为期间通常会创建“1 个月、2 周和 3 天”之类的内容,而标准化会将其转换为“1 个月和 17 天”。使用具体DurationFieldType上面的还可以自动将年转换为月。

然后你可以得到月数和天数:

int months = period.getMonths();
int days = period.getDays();

另一个细节是,当使用 DateTime 时对象,Period还将考虑时间(小时、分钟、秒)来了解一天是否已经过去。

如果您想忽略时间并仅考虑日期(日、月和年),请不要忘记将它们转换为 LocalDate :

// convert DateTime to LocalDate, so time is ignored
Period period = new Period(dateOfBirth.toLocalDate(), endDate.toLocalDate())
    // normalize to months and days
    .normalizedStandard(fields);

关于java - 两个 Joda DateTime 之间的差异(以月为单位)和剩余天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48885684/

相关文章:

java - 在 java 或 joda time 中使用格式化字符串添加分钟

datetime - Vaadin 和 Joda 日期时间

java - 使用按位运算符对密码类进行编码

java - 显示由 Web 服务生成的 jasper 报告

java - 在Android应用程序中分解字符串

android - 没有足够的信息来推断类型变量 T

java - 将 joda 时区映射到 windows 时区(例如在 C# 中)

java - EnableEurekaServer 导入不存在

java - Unirest 正在缓存基本身份验证信息

python - Kivy buildozer 在为 Android 打包时使用错误版本的 Kivy 和 KivyMD