如何计算Java中的时差?

时间:2017-05-02 13:47:43

标签: java

我们有什么方法可以计算两次之间的确切时差。

有关。例如

t1= 11:18 
t2= 20:20
t2 - t1 = 9.02

我尝试过这段代码,但没有帮助。

String hour1=h1+":"+m1;
String hour2= h2+":"+m2;
SimpleDateFormat dateFormat=new SimpleDateFormat("HH:mm");
Date d1= dateFormat.parse(hour1);
Date d2= dateFormat.parse(hour2);
long d=d2.getTime()-d1.getTime();
long hour= d/(60*60*1000) % 24;

通过使用此代码,我无法找到分钟差异。

6 个答案:

答案 0 :(得分:2)

JDK 8日期时间API大大简化了这些,可以使用持续时间计算时差,如下所示:

LocalTime t1 = LocalTime.of(11, 18);
LocalTime t2 = LocalTime.of(20, 20);
System.out.println(Duration.between(t1, t2)); //output - PT9H2M 

输出为9小时和2分钟。 (9H 2M)

答案 1 :(得分:1)

我使用以下代码转换为不同的时区并检查时间差异。您可以在几毫秒内获取时间并比较我在下面为您的情况所做的值。只需从timeInMillisOne中减去timeInMillisTwo即可。

Date date = dateFormat.parse("");
Calendar cal = Calendar.getInstance(); // that is NOW for the timezone configured on the computer.

long timeInMillis = cal.getTimeInMillis(); 
cal.setTimeInMillis(timeInMillis + (60000 * 60 * 5) - (60000 * 15));
//the line above converts to a different time zone and subtracts fifteen 
//minutes. 
long fifteenMinutesAgo = cal.getTime();

if(date.after(fifteenMinutesAgo)){
    //do something
}

答案 2 :(得分:1)

这可能有效。

package cn.sz.cyrus.java8test;

public class TimeCalcute {

    public static String calcTime(String time1, String time2) {
        String[] times1 = time1.split(":");
        String[] times2 = time2.split(":");
        int timeint1 = Integer.valueOf(times1[0]) * 60 + Integer.valueOf(times1[1]);
        int timeint2 = Integer.valueOf(times2[0]) * 60 + Integer.valueOf(times2[1]);
        int interval = timeint1 - timeint2;
        String result = String.format("%d:%02d", interval / 60, interval % 60);
        return result;
    }

    public static void main(String[] args) {
        String time1 = "20:20";
        String time2 = "11:18";
        System.out.println(calcTime(time1, time2));
        time1 = "22:46";
        time2 = "10:59";
        System.out.println(calcTime(time1, time2));
    }

}

这是打印结果:

9:02

11点47

答案 3 :(得分:1)

您可以将两个日期之间的差异视为毫秒级别,然后您可以将其转换为分钟或小时,

public static Long getDateDiff(Date date1, Date date2, TimeUnit timeUnit) {
        long diffInMillies = date1.getTime() - date2.getTime();
        return diffInMillies;
    }

public static void main(String[] args) throws IOException {
    double value=  Test.getDateDiff( new Date(System.currentTimeMillis()+37*10000),  new Date(System.currentTimeMillis()), TimeUnit.MINUTES);
    System.out.println("Hour:"+value/(100*60*60));

}

答案 4 :(得分:1)

你几乎拥有它。要计算你需要的分钟数。

long minutes = d / (60*1000) % 60;
long seconds = d / 1000 % 60;

我添加秒以防万一。虽然我有点喜欢@Pallavi的答案,但是使用持续时间,从结果对象中提取实际数据会更加人为。

答案 5 :(得分:1)

如果您不使用JDK 8,可以使用JodaTime,但使用JDK 8,您可以编写如下内容:

public static void main(String[] args) {
    LocalDateTime from = LocalDateTime.of(2017, 2, 5, 11, 18, 0);
    LocalDateTime to = LocalDateTime.of(2017, 2, 5, 20, 20, 0);

    long seconds = ChronoUnit.SECONDS.between(from, to);
    System.out.println(String.format("%d:%02d:%02d", seconds / 3600, (seconds % 3600) / 60, (seconds % 60)));
}

输出将是:9:02:00

要获得两个 LocalDateTime 之间的差异,您可以使用 Duration 类,但JDK 8中没有格式化器,因此如果您需要此特定输出格式然后你将使用第三方库或编写自己的格式化程序,如上例所示。

要使用持续时间,您可以写:

public static void main(String[] args) {  
    LocalDateTime from = LocalDateTime.of(2017, 2, 5, 11, 18, 0);  
    LocalDateTime to = LocalDateTime.of(2017, 2, 5, 20, 20, 0);

    Duration duration = Duration.between(from, to);

    long seconds = duration.getSeconds();
    System.out.println(String.format("%d:%02d:%02d", s / 3600, (s % 3600) / 60, (s % 60))); 
}

干杯,A。