【问题标题】:Calculate days, months, and years elapsed between start and end date [duplicate]计算开始日期和结束日期之间经过的天数、月数和年数[重复]
【发布时间】:2019-02-05 11:59:27
【问题描述】:

我正在开发日期计算应用程序,例如 Windows 10 计算器 您在哪里选择开始和结束日期 并计算年月日数

  public String differenceInDates(){
                Date start_date = convertStringToDate("2017-04-24");
                Date end_date = convertStringToDate("2018-07-24");
                long different = this.end_date.getTime() - this.start_date.getTime();

                        long millisInSeconds = 1000;
                        long millisInMinutes = millisInSeconds * 60;
                        long millisInHours = millisInMinutes * 60;
                        long millisInDay = millisInHours *24;

                        long elapsedDays = different / millisInDay;
                        different = different % millisInDay;

                        long elapsedHours = different / millisInHours;
                        different = different % millisInHours;

                        long elapsedMinutes = different / millisInMinutes;
                        different = different % millisInMinutes;

                        long elapsedSeconds = different / millisInSeconds;
                        if (elapsedHours == 0){
                            return String.valueOf("days"+elapsedDays+":"+":"+elapsedMinutes+":"+elapsedSeconds);
                        }
                        if (elapsedMinutes == 0){
                            return String.valueOf("days"+elapsedDays+":"+":"+elapsedHours+":"+elapsedSeconds);
                        }
                        if (elapsedHours == 0 && elapsedMinutes == 0){
                            return String.valueOf("days"+elapsedDays);
                        }
                        return String.valueOf("days"+elapsedDays+":"+" Hours"+elapsedHours+":"+" Minutes"+elapsedMinutes+":"+elapsedSeconds);
                }

                private Date convertStringToDate(String strDate) throws ParseException {
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
                        Date date = simpleDateFormat.parse(strDate);
                        return date;
                    }

我想要这样的答案

1 年 3 个月

【问题讨论】:

标签: java


【解决方案1】:

java.time

如果你可以使用LocalDate & Period,那就很简单了:

LocalDate date1 = LocalDateTime.of(2018, Month.SEPTEMBER, 2, 13, 40);
LocalDate date2 = LocalDateTime.of(2018, Month.SEPTEMBER, 2, 13, 40);
Period period = Period.between(date1, date2);
System.out.println(period.getYears() + " year " + period.getMonths() + " months");

【讨论】:

    【解决方案2】:

    您可以使用此代码:

    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
                String CURRDATE = "16-07-1991";
                String EFFDATE = "28-08-2018";
    
                Date startdate = null;
                Date enddate = null;
                try {
                    startdate = formatter.parse(CURRDATE);
                    enddate = formatter.parse(EFFDATE);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
    
                Calendar startCalendar = new GregorianCalendar();
                startCalendar.setTime(startdate);
    
                Calendar endCalendar = new GregorianCalendar();
                endCalendar.setTime(enddate);
    
                int monthCount = 0;
                int firstDayInFirstMonth = startCalendar.get(Calendar.DAY_OF_MONTH);
                startCalendar.set(Calendar.DAY_OF_MONTH, 1);
                endCalendar.add(Calendar.DAY_OF_YEAR, -firstDayInFirstMonth + 1);
    
                while (!startCalendar.after(endCalendar)) {
                    startCalendar.add(Calendar.MONTH, 1);
                    ++monthCount;
                }
    
                startCalendar.add(Calendar.MONTH, -1);
                --monthCount;
                int remainingDays = 0;
                while (!startCalendar.after(endCalendar)) {
                    startCalendar.add(Calendar.DAY_OF_YEAR, 1);
                    ++remainingDays;
                }
    
                startCalendar.add(Calendar.DAY_OF_YEAR, -1);
                --remainingDays;
    
                int lastMonthMaxDays = endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH);
                if (remainingDays >= lastMonthMaxDays) {
                    ++monthCount;
                    remainingDays -= lastMonthMaxDays;
                }
    
                int diffMonth = monthCount % 12;
                int diffYear = monthCount / 12;
                int diffDay = remainingDays;
    
                System.out.println(diffYear + " Year(s) and " + diffMonth + " Month(s) and " + diffDay + " Day(s)");
    

    结果是:

    27 Year(s) and 1 Month(s) and 12 Day(s)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 2020-08-21
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      相关资源
      最近更新 更多