Как найти разницу двух временных меток в Java?

У меня есть ArrayList включая несколько отметок времени, и цель состоит в том, чтобы найти разницу между первым и последним элементами ArrayList,

String a = ArrayList.get(0);
String b = ArrayList.get(ArrayList.size()-1);
long diff = b.getTime() - a.getTime();

Я также конвертировал типы в int, но все равно выдает ошибку The method getTime is undefined for the type String,

Дополнительная информация:

У меня есть класс А, который включает в себя

String timeStamp = new SimpleDateFormat("ss S").format(new Date());

и есть класс B, который имеет метод private void dialogDuration(String timeStamp)

а также dialogueDuration метод включает в себя:

String a = timeSt.get(0); // timeSt  is an ArrayList which includes all the timeStamps
String b = timeSt.get(timeSt.size()-1);   // This method aims finding the difference of the first and the last elements(timestamps) of the ArrayList  (in seconds)

long i = Long.parseLong(a);
long j = Long.parseLong(b);

long diff = j.getTime()- i.getTime();

System.out.println("a: " +i); 
System.out.println("b: " +j); 

И одним из условий является то, что утверждение (String timeStamp = new SimpleDateFormat("ss S").format(new Date());) не будет изменен в классе А. И объект класса В создается в классе А, так что он вызывает dialogueDuration(timeStamp) метод и передает значения меток времени в класс B.

Моя проблема в том, что это вычитание не работает, выдает ошибку cannot invoke getTime() method on the primitive type long, Это дает тот же тип ошибки также для типов int и String?

Заранее большое спасибо!

4 ответа

Решение

Может быть так:

SimpleDateFormat dateFormat = new SimpleDateFormat("ss S");
Date firstParsedDate = dateFormat.parse(a);
Date secondParsedDate = dateFormat.parse(b);
long diff = secondParsedDate.getTime() - firstParsedDate.getTime();

Предполагая, что у вас есть объекты Timestamp или Date Object в вашем ArrayList, вы можете сделать:

Timestamp a = timeSt.get(0);

Timestamp b = timeSt.get(timeSt.size()-1);

long diff = b.getTime() - a.getTime();

Вы можете рассчитать разницу с помощью обоих следующих методов (также вы можете изменить упомянутые методы, чтобы вернуть разницу как «миллисекунда», «день», «месяц» и т. д., добавив дополнительный оператор if или используя регистр переключения):

      private Long calculateDifference(String date1, String date2, String value) {
        Timestamp date_1 = stringToTimestamp(date1);
        Timestamp date_2 = stringToTimestamp(date2);
        long milliseconds = date_1.getTime() - date_2.getTime();
        if (value.equals("second"))
            return milliseconds / 1000;
        if (value.equals("minute"))
            return milliseconds / 1000 / 60;
        if (value.equals("hours"))
            return milliseconds / 1000 / 3600;
        else
            return new Long(999999999);
    }

private Timestamp stringToTimestamp(String date) {
        try {
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date parsedDate = dateFormat.parse(date);
            return new Timestamp(parsedDate.getTime());
        } catch (Exception e) {
            return null;
        }
    }

Например:

      calculateDifference("2021-10-20 10:00:01", "2021-10-20 10:15:01", "minute");

вернет '-15'

или же

      calculateDifference("2021-10-20 12:00:01", "2021-10-20 10:15:01", "minute");

вернет '105'

Вы должны сделать свой ArrayList x для ArrayList<TimeStamp> x, Впоследствии ваш метод get(int) вернет объект типа TimeStamp (вместо типа String). На TimeStamp вам разрешено вызывать getTime(),

Кстати, тебе действительно нужно java.sql.TimeStamp? Может быть простой Date или же Calendar проще и уместнее.

Другие вопросы по тегам