【问题标题】:How to get Difference from two dates in form of days hours minutes and seconds如何以天时分秒的形式获得两个日期的差异
【发布时间】:2014-10-26 06:03:53
【问题描述】:

我有两个日期,一个是未来日期,另一个是当前日期。 我想得到这两个日期之间的区别,我正在使用以下代码,但输出不是我想要的,请帮助我解决这个问题。我是安卓编程新手。

public void getDateDifference(String FutureDate) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

    try {

        Date currentDate = dateFormat.parse(FutureDate);
        System.out.println(currentDate);

        Date oldDate = new Date();

        long diff = currentDate.getTime() - oldDate.getTime();
        long seconds = diff / 1000;
        long minutes = seconds / 60;
        long hours = minutes / 60;
        long days = hours / 24;

        counterDaysTV.setText(days + "");
        counterMinsTV.setText(minutes + "");
        counterHoursTV.setText(hours + "");
        counterSecTV.setText(seconds + "");


    } catch (Exception e) {

        e.printStackTrace();
    }

}

我正在使用这种方法来查找差异,但它显示为正确的 71 天,但接下来显示 1716 小时 102987 分钟和 6179267 秒,我希望它显示为倒计时,请帮助我。

【问题讨论】:

    标签: android timer


    【解决方案1】:

    你总是用整个时间差来计算。

    您首先必须计算天数,然后再计算小时数。然后用这个剩余的分钟等等。

    public void getDateDifference(String FutureDate) {
    
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    
        try {
            Date currentDate = dateFormat.parse(FutureDate);
            System.out.println(currentDate);
    
            Date oldDate = new Date();
    
            long diff = currentDate.getTime() - oldDate.getTime();
    
            long days = diff / (24 * 60 * 60 * 1000);
            diff -= days * (24 * 60 * 60 * 1000);
    
            long hours = diff / (60 * 60 * 1000);
            diff -= hours * (60 * 60 * 1000);
    
            long minutes = diff / (60 * 1000);
            diff -= minutes * (60 * 1000);
    
            long seconds = diff / 1000;
    
            counterDaysTV.setText(days + "");
            counterMinsTV.setText(minutes + "");
            counterHoursTV.setText(hours + "");
            counterSecTV.setText(seconds + "");
    
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    

    【讨论】:

      【解决方案2】:

      下面的代码可能有效,试一试...请注意,我认为这不是有效的方法...

              long days = diff / (24*60*60*1000);
              long hours=(diff/(60*60*1000))-(days*24);
              long minutes=(diff/(60*1000))-(days*24*60)-(hours*60);
              long seconds=(diff/(1000))-(days*24*60*60)-(hours*60*60)-(minutes*60);
      

      【讨论】:

        【解决方案3】:

        我对 davidtrautmann 的回答做了一些修改,感谢 davidtrautmann。用户可以找到更好的方法来获取当前时间和过去日期之间的差异,以天、小时、分钟和秒为单位。用户也可以根据自己的需要进行修改。

        public String getDifferentBetweenTwoDates(String pastDate ){//your input date format should be same as your dateformater
        
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date inputDate = null;
            try {
                inputDate = format.parse(pastDate); // format.parse("2016-04-04 20:10:10");
        
            }catch (ParseException e) {
                e.printStackTrace();
            }
        
            Calendar pastCalendar = Calendar.getInstance();
            if(inputDate!=null){
                pastCalendar.setTime(inputDate);
            }
            long pastDateTimeInMilli = pastCalendar.getTimeInMillis();
        
            Calendar currentCalendar = Calendar.getInstance();
            long currentDateTimeInMilli = currentCalendar.getTimeInMillis();
        
            String strDifference="";
            long different = currentDateTimeInMilli - pastDateTimeInMilli;
        
            long secondsInMilli = 1000;
            long minutesInMilli = secondsInMilli * 60;
            long hoursInMilli = minutesInMilli * 60;
            long daysInMilli = hoursInMilli * 24;
        
            int elapsedDays = (int)(different / daysInMilli);
            different = different % daysInMilli;
        
            if(elapsedDays>0){
                strDifference = ""+elapsedDays;
                return strDifference+" days ago";
            }
        
            int elapsedHours = (int)(different / hoursInMilli);
            different = different % hoursInMilli;
            if(elapsedHours>0){
                strDifference = ""+elapsedHours;
                return strDifference+" hours ago";
            }
        
            int elapsedMinutes = (int)(different / minutesInMilli);
            different = different % minutesInMilli;
            if(elapsedMinutes>0){
                strDifference = ""+elapsedMinutes;
                return strDifference+" minuts ago";
            }
        
            int elapsedSeconds = (int)(different / secondsInMilli);
            if(elapsedSeconds>0){
                strDifference = ""+elapsedSeconds;
                return strDifference +"  seconds ago";
            }else{
                return "just now";
            }
        
        }
        

        【讨论】:

          猜你喜欢
          • 2020-06-13
          • 2022-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-23
          • 2023-03-22
          • 2014-10-07
          • 1970-01-01
          相关资源
          最近更新 更多