Java 计算两个日期之间的差异结果我只需要几个月和几天(不含年份)
我用java编写了这个类来计算两个日期之间的传出,但是 今年的结果我只需要这个月和几天。例1 结果是第2年2个月5天。我需要结果14个月5天 用于日期差异计算的Java代码Java 计算两个日期之间的差异结果我只需要几个月和几天(不含年份),java,Java,我用java编写了这个类来计算两个日期之间的传出,但是 今年的结果我只需要这个月和几天。例1 结果是第2年2个月5天。我需要结果14个月5天 用于日期差异计算的Java代码 public String getPeriod(Date a, Date b) { Calendar startDay = Calendar.getInstance(); startDay.setTimeInMillis(a.getTime()); //create
public String getPeriod(Date a, Date b) {
Calendar startDay = Calendar.getInstance();
startDay.setTimeInMillis(a.getTime());
//create calendar object for current day
Calendar endDay = Calendar.getInstance();
endDay.setTimeInMillis(b.getTime());
//Get difference between years
years = endDay.get(Calendar.YEAR) - startDay.get(Calendar.YEAR);
int deathMonth = endDay.get(Calendar.MONTH) + 1;
int openMonth = startDay.get(Calendar.MONTH) + 1;
months = deathMonth - openMonth;
//if month difference is in negative then reduce years by one
//and calculate the number of months.
if (months < 0)
{
years--;
months = 12 - openMonth + deathMonth;
if (endDay.get(Calendar.DATE) < startDay.get(Calendar.DATE))
months--;
}
else if (months == 0 && endDay.get(Calendar.DATE) < startDay.get(Calendar.DATE))
{
years--;
months = 11;
}
//Calculate the days
if (endDay.get(Calendar.DATE) > startDay.get(Calendar.DATE))
days = endDay.get(Calendar.DATE) - startDay.get(Calendar.DATE);
else if (endDay.get(Calendar.DATE) < startDay.get(Calendar.DATE))
{
int today = endDay.get(Calendar.DAY_OF_MONTH);
endDay.add(Calendar.MONTH, -1);
days = endDay.getActualMaximum(Calendar.DAY_OF_MONTH) - startDay.get(Calendar.DAY_OF_MONTH) + today;
}
else
{
days = 0;
if (months == 12)
{
years++;
months = 0;
}
}
return (months+","+days+","+years);
}
公共字符串getPeriod(日期a、日期b){
Calendar startDay=Calendar.getInstance();
startDay.setTimeInMillis(a.getTime());
//为当前日期创建日历对象
Calendar endDay=Calendar.getInstance();
setTimeInMillis(b.getTime());
//年与年之差
years=endDay.get(Calendar.YEAR)-startDay.get(Calendar.YEAR);
int deathMonth=endDay.get(Calendar.MONTH)+1;
int openMonth=startDay.get(Calendar.MONTH)+1;
月=死亡月-开放月;
//如果月差为负,则将年数减少一年
//并计算月数。
如果(月数<0)
{
年--;
月数=12-开放月+死亡月;
if(endDay.get(Calendar.DATE)startDay.get(Calendar.DATE))
days=endDay.get(Calendar.DATE)-startDay.get(Calendar.DATE);
else if(endDay.get(Calendar.DATE)
考虑使用Java8中引入的java实现您的getPeriod()
方法。以下是这样一种实施:
/*所需的导入。
导入java.time.LocalDate;
导入java.time.Month;
导入java.time.temporal.ChronoUnit;
*/
私有静态字符串getPeriod(LocalDate开始,LocalDate结束){
长月份=计时单位。月份。介于(开始、结束)之间;
长天数=时间单位。天数。间隔(开始。加分(月),结束);
返回字符串.format(“%d个月%d天”,月,天);
}
如果您这样调用该方法:
LocalDate start=LocalDate.of(2020年1月1日);
LocalDate end=LocalDate.of(2020年4月29日);
getPeriod(开始、结束);
该方法将返回以下字符串:
3 months 28 days
请参阅Oracle java教程中的线索。当然,如果在返回值中包含年份,则结果会随年份而变化!你需要什么帮助?如果你至少使用java 8,考虑使用“我的发送日期”开始日期和结束日期是String时期= Cal.GETPATH(DopDeNATET.GETDATE()),DTDATAXDATE。GETDATE());我还需要和你约会JDayChooser@derickbarthelot要将老式的
Date
转换为LocalDate
请使用yourDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate()
。之后,您可以享受这个答案的简单性和java.time(现代java日期和时间API)的良好设计。