Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将日期转换为此格式:";X年,X月,X天……”;_Java_Date - Fatal编程技术网

Java 将日期转换为此格式:";X年,X月,X天……”;

Java 将日期转换为此格式:";X年,X月,X天……”;,java,date,Java,Date,我正在创建一个日历实例,并将日期设置为1997年7月1日,如下所示: 我想做的是,在不使用外部库的情况下,从当前日期(例如,2015年11月1日02:45:30)之前的该日期(适当计算闰年/秒会很好,但不是必需的)获取以下输出: 18年4个月0天2小时45分30秒 我不太确定这是否可能。我尝试了一些奇怪的、不太符合逻辑的计算,需要进行大量改进,但无法实现: int years = currentYear - calendar.get(Calendar.YEAR); int months = ca

我正在创建一个日历实例,并将日期设置为1997年7月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)));

如果您使用的是Java8,那么您可以使用LocalDateTime和PlainTimeStamp类


这里您可以找到一些答案

如果您使用的是Java8,那么您就可以使用LocalDateTime和PlainTimeStamp类

在这里您可以找到一些答案,这可能会有所帮助

    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);
从天开始,我们可以用模除法写出求闰年数、月数的逻辑

Java8有一个新的
日期API
,您也可以尝试一下,因为您正在使用Java8

,这可能会有所帮助

    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有一个新的
日期API
您也可以尝试,因为您正在使用Java 8

将两个时间瞬间转换为从纪元UTC开始的毫秒,然后将差值(以毫秒为单位)转换为年、月、日等。@MickMnemonic没有正确理解。无论如何,我试着把生日和currentDate都转换成毫秒,然后从生日中减去currentDate,得到。。。1997我做错了什么?你能在哪里分享代码吗?您现在发布的内容不包括转换为毫秒。您使用的是哪一版本的java?将两个时间瞬间转换为从纪元UTC开始的毫秒,然后将差值(以毫秒为单位)转换为年、月、日等。@MickMnemonic没有正确理解。无论如何,我试着把生日和currentDate都转换成毫秒,然后从生日中减去currentDate,得到。。。1997我做错了什么?你能在哪里分享代码吗?您现在发布的内容不包括毫秒的转换。您使用的是哪个版本的java?