两个Joda DateTime在几个月和几天之间的差异

时间:2018-02-20 12:51:21

标签: java android jodatime period date-difference

我需要获取两个string = "abcdcdc" sub_string = "cdc" print(len(string)) print(len(sub_string)) print(range(0,len(string)-len(sub_string)+1)) print([1 for i in range(0,5)]) print([string[i:(len(sub_string) + i)] for i in range(0,5)]) print([string[i:(len(sub_string) + i)]==sub_string for i in range(0,5)]) print(sum([string[i:(len(sub_string) + i)]==sub_string for i in range(0,5)])) print([1 for i in range(0, len(string) - len(sub_string) + 1) if (string[i:(len(sub_string) + i)] == sub_string)]) print(sum([1 for i in range(0, len(string) - len(sub_string) + 1) if (string[i:(len(sub_string) + i)] == sub_string)])) 个对象之间的月份数,然后获得剩余的天数。

以下是我之间的几个月:

DateTime

我不确定如何知道下个月会剩下多少天。我尝试过以下方法:

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

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

1 个答案:

答案 0 :(得分:2)

使用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);