Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以小时:分钟:秒为单位计算两个日期之间的差值?_Java_Android - Fatal编程技术网

Java 以小时:分钟:秒为单位计算两个日期之间的差值?

Java 以小时:分钟:秒为单位计算两个日期之间的差值?,java,android,Java,Android,如何计算两个日期之间的差异并以小时:分钟:秒的格式显示 例如: 开始时间:2016-12-20T04:30 结束时间:2016-12-22T05:00 输出应为“48小时30分钟0秒” 这就是我尝试过的: Long diff=(endDate.get time()-startDate.gettime())/1000; Log.d(“应用程序”,“小时差为”+diff/1000/60/60); 分钟=diff/1000/60; 秒=diff/1000; 使用这段代码,我得到了正确的小时数。但是

如何计算两个日期之间的差异并以小时:分钟:秒的格式显示

例如:

开始时间:2016-12-20T04:30
结束时间:2016-12-22T05:00
输出应为“48小时30分钟0秒”

这就是我尝试过的:

Long diff=(endDate.get time()-startDate.gettime())/1000;
Log.d(“应用程序”,“小时差为”+diff/1000/60/60);
分钟=diff/1000/60;
秒=diff/1000;
使用这段代码,我得到了正确的小时数。但是分钟和秒的值没有得到正确的值。

试试看

1。首先添加以下方法,然后使用parseDate

Date startDate = parseDate("2016-12-20T04:30");
Date endDate = parseDate("2016-12-22T05:00");
2.计算这两个变量的差值

long differenceInMillis = endDate.getTime() - startDate.getTime();
3.使用formatElapsedTime方法处理格式化差异

String formattedText = formatElapsedTime(differenceInMillis/1000); //divide by 1000 to get seconds from milliseconds
//Result will be 48hours 30minutes 0 seconds


public static Date parseDate (String strDate) {

    DateFormat dateFormat = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm");
    Date date1 = null;
    try {
        date1 = dateFormat.parse (strDate);
    }
    catch (ParseException e) {
        e.printStackTrace ();
    }
    return date1;
}

public static String formatElapsedTime (long seconds) {

    long hours = TimeUnit.SECONDS.toHours(seconds);
    seconds -= TimeUnit.HOURS.toSeconds (hours);

    long minutes = TimeUnit.SECONDS.toMinutes (seconds);
    seconds -= TimeUnit.MINUTES.toSeconds (minutes);

    return String.format ("%dhr:%dmin:%dsec", hours, minutes, seconds);
}
尝试此功能:-

//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 hours, %d minutes, %d seconds%n", 
        elapsedHours, elapsedMinutes, elapsedSeconds);

}

使用新API对旧问题的新答案:
java.time

您可以编写一个方法,将日期时间实际接受为
String
s以及时区,然后通过为此目的设计的类计算差值:
java.time.Duration

下面是一个代码示例:

publicstaticstringgetdifference(stringfirstdt、stringseconddt、stringzone){
//为计算创建分区只是为了遵守夏令时
ZoneId ZoneId=ZoneId.of(区域);
//然后解析传递的日期时间并添加时区
ZonedDateTime firstZdt=ZonedDateTime.of(
解析(firstDt),zoneId
);
ZonedDateTime secondZdt=ZonedDateTime.of(
LocalDateTime.parse(secondDt),zoneId
);
//计算两个日期时间之间的持续时间
持续时间;
/*
*持续时间的JavaDocs告诉我们:
* 
*“这种方法的结果可能是负周期
*如果结束早于开始。”。
* 
*因此,我们需要确保较旧的日期时间
*方法“介于(开始,结束)”中的“开始”
*/
如果(第一个ZDT.isAfter(第二个ZDT)){
持续时间=持续时间之间(第二个ZDT,第一个ZDT);
}否则{
持续时间=持续时间。介于(第一个ZDT,第二个ZDT)之间;
}
//存储持续时间的完整小时数
长时间间隔;
hoursBetween=持续时间。到小时();
//计算完整持续时间剩余的分钟数(以分钟为单位)
时间间隔很长;
minutesBetween=持续时间.toMinutes()-(hoursBetween*60);
//计算完整持续时间剩余的秒数(以秒为单位)
中间有很长的一段时间;
secondsBetween=duration.getSeconds()-(duration.toMinutes()*60);
//构建结果字符串,注意可能缺少前导零
StringBuilder resultBuilder=新建StringBuilder();
resultBuilder.append(hoursbever.append(“小时”);
if(分钟间隔<10和分钟间隔>0)
resultBuilder.append(“0”);
resultBuilder.append(minutesBetween.append(“分钟”);
如果(介于<10和>0之间的秒数)
resultBuilder.append(“0”);
resultBuilder.append(secondsBetween.append(“秒”);
返回resultBuilder.toString();
}
如果在
main
中使用它

publicstaticvoidmain(字符串[]args){
字符串timeDiff=getDifference(“2016-12-20T04:30”、“2016-12-22T05:00”、“UTC”);
系统输出打印项次(timeDiff);
}
。。。您将获得以下输出:

48小时30分0秒
上面的代码将在Java 8中使用,稍后,
Duration
获得了方法
toHoursPart()
toMinutesPart()
toSecondsPart()
,这些方法实际上在内部进行了必要的计算

将要更改的代码(使用Java 11进行了尝试):

//存储持续时间的完整小时数
长时间间隔;
hoursbween=duration.toHoursPart();
//计算完整持续时间剩余的分钟数(以分钟为单位)
时间间隔很长;
minutesBetween=duration.toMinutesPart();
//计算完整持续时间剩余的秒数(以秒为单位)
中间有很长的一段时间;
secondsBetween=duration.toSecondsPart();

到目前为止您尝试了什么???搜索googleLong diff=(endDate.get time()-startDate.gettime())/1000 Log.d(“应用程序”,“小时差为”+diff/1000/60/60)min=diff/1000/60秒=diff/1000。。使用这个代码,我得到了正确的小时数。但是分钟和秒的值不正确使用上述代码:2016-12-20T04:30 2016-12-22T05:00对于上述两个输入,我得到的答案是485000小时0秒。。。相反,我应该得到48小时30分钟0秒我在转换毫秒,我把它除以1000得到秒,然后计算小时,分钟和秒。
import java.util.Calendar;

public class DateDifferenceExample {
    public static void main(String[] args) {
        // Creates two calendars instances
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();

        // Set the date for both of the calendar instance
        cal1.set(2006, Calendar.DECEMBER, 30);
        cal2.set(2007, Calendar.MAY, 3);

        // Get the represented date in milliseconds
        long millis1 = cal1.getTimeInMillis();
        long millis2 = cal2.getTimeInMillis();

        // Calculate difference in milliseconds
        long diff = millis2 - millis1;

        // Calculate difference in seconds
        long diffSeconds = diff / 1000;

        // Calculate difference in minutes
        long diffMinutes = diff / (60 * 1000);

        // Calculate difference in hours
        long diffHours = diff / (60 * 60 * 1000);

        // Calculate difference in days
        long diffDays = diff / (24 * 60 * 60 * 1000);

        System.out.println("In milliseconds: " + diff + " milliseconds.");
        System.out.println("In seconds: " + diffSeconds + " seconds.");
        System.out.println("In minutes: " + diffMinutes + " minutes.");
        System.out.println("In hours: " + diffHours + " hours.");
        System.out.println("In days: " + diffDays + " days.");
    }
}