Мне нужно сравнить две даты в Java 8 , чтобы получить разницу в минутах . Теперь я использую java.utils.Date для хранения дат, но не могу понять, как узнать разницу в минутах. Кроме того, сравниваемые даты могут находиться в 2 разных часовых поясах, которые следует учитывать, если они есть. Как мне это сделать?

Примеры дат для сравнения:

Mon Oct 12 12:20:00 IST 2020
Mon Oct 05 09:56:57 GMT 2020
0
Brijesh Choudhary 5 Окт 2020 в 07:27

1 ответ

Лучший ответ

Сама по себе разница часовых поясов не представляет проблемы. Java прекрасно справляется с этим. У вас есть проблема в том, что IST является двусмысленным, хотя это может означать ирландское летнее время, стандартное время Израиля, стандартное время Индии или что-то еще.

Java.time

Я рекомендую вам использовать java.time, современный API даты и времени Java, для работы с датой и временем.

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz uuuu", Locale.ENGLISH);
    
    String aDateTimeString = "Mon Oct 12 12:20:00 IST 2020";
    String anotherDateTimeString = "Mon Oct 05 09:56:57 GMT 2020";
    
    ZonedDateTime aDateTime = ZonedDateTime.parse(aDateTimeString, formatter);
    ZonedDateTime anotherDateTime = ZonedDateTime.parse(anotherDateTimeString, formatter);
    long differenceInMinutes = ChronoUnit.MINUTES.between(anotherDateTime, aDateTime);
    
    System.out.format("The times are %s and %s%n", aDateTime, anotherDateTime);
    System.out.format("Difference is %d minutes%n", differenceInMinutes);

Выход:

The times are 2020-10-12T12:20Z[Atlantic/Reykjavik] and 2020-10-05T09:56:57Z[GMT]
Difference is 10223 minutes

Java интерпретирует IST как исландское время. Вы могли не предполагать этого. Но расчет разницы по часовым поясам работает.

Я даю ссылку ниже на то, как контролировать, как Java интерпретирует IST.

Ссылки

2
Ole V.V. 5 Окт 2020 в 04:55