如何获取Android应用中两个日期时间之间的天数和时差?

时间:2016-11-30 11:03:36

标签: android datetime timer

我试图实现一个时间计数器,我在其中减去当前时间(可能是Calendar.getInstance()?)并给出未来时间,以便结果是差异(以天为单位HH:MM:SS)在两个日期时间之间。

代码:

String dateStart = "01/14/2012 09:29:58";
String dateStop = "01/15/2012 10:31:48";

//HH converts hour in 24 hours format (0-23), day calculation
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

Date d1 = null;
Date d2 = null;

try {
    d1 = format.parse(dateStart);
    d2 = format.parse(dateStop);

    //in milliseconds
    long diff = d2.getTime() - d1.getTime();

我正在尝试记录差异,但它没有出现在日志中,可能是这里的问题

    Log.d("Check", Long.toString(diff));

    long diffSeconds = diff / 1000 % 60;
    long diffMinutes = diff / (60 * 1000) % 60;
    long diffHours = diff / (60 * 60 * 1000) % 24;
    long diffDays = diff / (24 * 60 * 60 * 1000);

    System.out.print(diffDays + " days, ");
    System.out.print(diffHours + " hours, ");
    System.out.print(diffMinutes + " minutes, ");
    System.out.print(diffSeconds + " seconds.");
} catch (Exception e) {
    e.printStackTrace();
}

我看过很多文章,但无法解决问题。

1 个答案:

答案 0 :(得分:0)

在gradle中添加:

compile 'joda-time:joda-time:2.9.4'

然后将您的代码更改为:

String dateStart = "01/14/2012 09:29:58";
String dateStop = "01/15/2012 10:31:48";
DateTimeUtils obj = new DateTimeUtils();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");

try {
    Date date1 = simpleDateFormat.parse(dateStart);
    Date date2 = simpleDateFormat.parse(dateStop);

    obj.printDifference(date1, date2);
} catch (ParseException e) {
    e.printStackTrace();
}

printDifference方法:

//1 minute = 60 seconds
//1 hour = 60 x 60 = 3600
//1 day = 3600 x 24 = 86400
public void printDifference(Date startDate, Date endDate) {
    //milliseconds
    long different = endDate.getTime() - startDate.getTime();

    System.out.println("startDate : " + startDate);
    System.out.println("endDate : "+ endDate);
    System.out.println("different : " + different);

    long secondsInMilli = 1000;
    long minutesInMilli = secondsInMilli * 60;
    long hoursInMilli = minutesInMilli * 60;
    long daysInMilli = hoursInMilli * 24;

    long elapsedDays = different / daysInMilli;
    different = different % daysInMilli;

    long elapsedHours = different / hoursInMilli;
    different = different % hoursInMilli;

    long elapsedMinutes = different / minutesInMilli;
    different = different % minutesInMilli;

    long elapsedSeconds = different / secondsInMilli;

    System.out.printf("%d days, %d hours, %d minutes, %d seconds%n", 
        elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds);
}