将日期转换为此格式:"X years, X months, X days..."



我正在创建一个日历实例,并将日期设置为1997年7月1日,如下所示:

int currentYear = Calendar.getInstance().get(Calendar.YEAR); 
Calendar calendar = Calendar.getInstance();
calendar.clear();
calendar.set(1997, 6, 1);

我想做的是,在不使用外部库的情况下,在当前日期(例如2015年11月1日02:45:30)之前,从该日期获得以下输出(正确计算闰年/秒是好的,但不是必需的):

18年4个月0天2小时45分30秒

我不太确定这是否可能。我尝试了一些奇怪的、不太符合逻辑的计算,需要大量改进,但无法实现:

int years = currentYear - calendar.get(Calendar.YEAR);
int months = calendar.get(Calendar.MONTH);
if(currentMonth > months) {
    years -= 1;
}

更新-到目前为止的代码:

Calendar currentDate = Calendar.getInstance();
currentDate.clear();
Calendar birthDate = Calendar.getInstance();
birthDate.clear();
birthDate.set(this.birthYear, this.birthMonth - 1, this.birthDay);
Calendar date = Calendar.getInstance();
date.clear();
date.setTimeInMillis(birthDate.getTimeInMillis() - currentDate.getTimeInMillis());
System.out.println(Integer.toString(date.get(Calendar.YEAR)));

如果您使用的是java 8,那么您有LocalDateTime和PlainTimeStamp类来使用

在这里您可以找到一些答案Java 8:计算两个LocalDateTime 之间的差异

这可能有助于

    Calendar startCalendar = Calendar.getInstance();
    startCalendar.clear();
    startCalendar.set(1997, 6, 1);
    Date start = startCalendar.getTime();
    Calendar endCalendar = Calendar.getInstance();
    // endCalendar.clear();
    // endCalendar.set(2015, 10, 1);
    Date end = endCalendar.getTime();
    long diff = end.getTime() - start.getTime();
    long days = TimeUnit.MILLISECONDS.toDays(diff);
    long hours = TimeUnit.MILLISECONDS.toHours(diff) % TimeUnit.DAYS.toHours(1);
    long minutes = TimeUnit.MILLISECONDS.toMinutes(diff) % TimeUnit.HOURS.toMinutes(1);
    long seconds = TimeUnit.MILLISECONDS.toSeconds(diff) % TimeUnit.MINUTES.toSeconds(1);
    System.out.println(days + " " + hours + " " + minutes + " " + seconds);

根据天数,我们可以编写逻辑,使用模除法计算闰年、月数

Java 8有一个新的Date API,您也可以尝试,因为您使用的是Java 8

最新更新