Как рассчитать разницу во времени в Java? - PullRequest
79 голосов
/ 08 февраля 2011

Я хочу вычесть два временных периода, скажем, 16:00:00 из 19:00:00. Есть ли какая-либо функция Java для этого? Результаты могут быть в миллисекундах, секундах или минутах.

Ответы [ 15 ]

106 голосов
/ 08 февраля 2011
String time1 = "16:00:00";
String time2 = "19:00:00";

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime(); 

Разница в миллисекундах.

Я изменил пост sfaizs .

73 голосов
/ 31 декабря 2015

Java 8 имеет чистое решение - Мгновенное и длительное

Пример:

import java.time.Duration;
import java.time.Instant;
...
Instant start = Instant.now();
//your code
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end);
System.out.println("Time taken: "+ timeElapsed.toMillis() +" milliseconds");
34 голосов
/ 28 декабря 2013

Чтобы получить красивые различия во времени, тогда

// d1, d2 are dates
long diff = d2.getTime() - d1.getTime();

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.");
30 голосов
/ 25 ноября 2014

Java 8

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalDateTime dateTime1= LocalDateTime.parse("2014-11-25 19:00:00", formatter);
LocalDateTime dateTime2= LocalDateTime.parse("2014-11-25 16:00:00", formatter);

long diffInMilli = java.time.Duration.between(dateTime1, dateTime2).toMillis();
long diffInSeconds = java.time.Duration.between(dateTime1, dateTime2).getSeconds();
long diffInMinutes = java.time.Duration.between(dateTime1, dateTime2).toMinutes();
11 голосов
/ 08 февраля 2011

Как и любой другой язык;преобразуйте свои периоды времени в метку времени Unix (т. е. секунды с начала эпохи Unix), а затем просто вычтите.Затем полученные секунды следует использовать в качестве новой метки времени Unix и считывать их в формате, который вы хотите.

Ах, дайте вышеупомянутому постеру (genesiss) его должную оценку, код всегда удобен;) Хотя выесть объяснение:)

7 голосов
/ 21 марта 2015
import java.util.Date;
...
Date d1 = new Date();
...
...
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime()); //gives the time difference in milliseconds. 
System.out.println((d2.getTime()-d1.getTime())/1000); //gives the time difference in seconds.

и, чтобы показать в более хорошем формате, вы можете использовать:

    DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###");
    System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000));
2 голосов
/ 01 августа 2017
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception{
    String time1 = "12:00:00";
    String time2 = "12:01:00";
    SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
    Date date1 = format.parse(time1);
    Date date2 = format.parse(time2);
    long difference = date2.getTime() - date1.getTime();
    System.out.println(difference/1000);
}}

генерирует дескрипторы исключений при разборе исключений

2 голосов
/ 08 февраля 2011

Тяжелый способ - преобразовать в миллис, вычитать, а затем вернуться к любым секундам или около того, что вы захотите. Лучше всего использовать JodaTime .

1 голос
/ 21 августа 2016
String start = "12:00:00";
String end = "02:05:00";

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 

Date date1 = format.parse(start);

Date date2 = format.parse(end);

long difference = date2.getTime() - date1.getTime(); 

int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);

if(minutes<0)minutes += 1440; 

Теперь минуты будут правильной продолжительностью между двумя временами (в минутах).

1 голос
/ 26 февраля 2016

Альтернативный вариант, если берется время из разных дней, например: 22:00 и 01: 55.

public static long getDiffTime(Date date1, Date date2){
        if (date2.getTime() - date1.getTime() < 0) {// if for example date1 = 22:00, date2 = 01:55.
            Calendar c = Calendar.getInstance();
            c.setTime(date2);
            c.add(Calendar.DATE, 1);
            date2 = c.getTime();
        } //else for example date1 = 01:55, date2 = 03:55.
        long ms = date2.getTime() - date1.getTime();

        //235 minutes ~ 4 hours for (22:00 -- 01:55).
        //120 minutes ~ 2 hours for (01:55 -- 03:55).
        return TimeUnit.MINUTES.convert(ms, TimeUnit.MILLISECONDS);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...