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