Как найти разницу двух временных меток в 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
проще и уместнее.