JodaTime从周期中获取值



我有两个DateTimes,一个是时间'since'和'now'

我需要的是得到两者之间的时间

我的问题是进入我想要得到它的格式:

的例子:Since = '17 April 2010'Now = '15 April 2011'

我想要'0年11个月29天'

如果是'13 april 2010',结果应该是这样的:"1年0个月零2天"

我不太明白你的问题。听起来你想要:

DateTime since = ...;
DateTime now = ...;
Period period = new Period(since, now, PeriodType.yearMonthDay());
int years = period.getYears();
int months = period.getMonths();
int days = period.getDays();

如果不是这样,你能再详细说明一下吗?

java.time

下面引用的是来自Joda-Time:

主页的通知

注意,从Java SE 8开始,用户被要求迁移到Java。time (JSR-310)——JDK的核心部分,取代了这个项目。

使用java.time的解决方案,现代日期-时间API:

  1. 使用Period#between获取两个LocalDate s之间的周期。
  2. 请注意,字符串中的月份名称是小写的,因此,您需要使用parseCaseInsensitive函数构建DateTimeFormatter
  3. 不要在没有Locale的情况下使用DateTimeFormatter
演示:

import java.time.LocalDate;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;
public class Main {
    public static void main(String[] args) {
        DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                .parseCaseInsensitive()
                                .appendPattern("d MMMM uuuu")
                                .toFormatter(Locale.ENGLISH);
        
        LocalDate since = LocalDate.parse("17 april 2010", dtf);
        LocalDate now = LocalDate.parse("15 april 2011", dtf);
        
        Period period = Period.between(since, now);
        
        String strPeriod = String.format("%d years %d months %d days", period.getYears(), period.getMonths(),
                period.getDays());
        System.out.println(strPeriod);
    }
}
输出:

0 years 11 months 29 days
<<p> 在线演示/kbd>

Trail: Date Time了解更多关于现代日期时间API的信息。


*出于任何原因,如果你必须坚持Java 6或Java 7,你可以使用ThreeTen-Backport,它支持大部分 Java。time功能到Java 6 &7. 如果你正在为一个Android项目工作,你的Android API级别仍然不符合Java-8,检查Java 8+可用的API,通过desugaring和如何在Android项目中使用ThreeTenABP。

相关内容

  • 没有找到相关文章

最新更新