Как я могу найти разницу между двумя временами?

Я получаю время от сервера, как этот 2018-11-27T09:51:31.832107+00:00, затем анализирую время так, как OffsetDateTime.parse. Я хочу провести различие между двумя временами OffsetDateTime.now - OffsetDateTime.parse.

После вычитания я должен показать прошедшее время в такой форме: 14 min 12 seconds. Как я могу сделать это правильно, чтобы получить временной промежуток?

Вы что-нибудь искали / пробовали?

achAmháin 21.12.2018 10:33

@ OleV.V. После вычитания я должен показать время в этой форме 14 min 12 seconds

TikTak 21.12.2018 11:06

Спасибо за дополнительную точность, это значительно упрощает ответ на вопрос. Добавляя информацию, сделайте это в самом вопросе, чтобы у нас было все в одном месте (на этот раз я сделал это за вас).

Ole V.V. 21.12.2018 11:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
721
3

Ответы 3

У вас есть в Android метод, который называется "сравнить", он может вам помочь, см. Документацию здесь:

https://developer.android.com/reference/java/time/OffsetDateTime#compareTo(java.time.OffsetDateTime)

Преобразуйте два раза в миллисекунды и после этого вычтите вторые миллисекунды из первых миллисекунд, а затем отформатируйте результат в устную дату.

Плохая идея. Встроены методы поиска разницы.

Ole V.V. 21.12.2018 10:38

Почему ты говоришь, что это плохая идея?

Md.ibrahim khalil 21.12.2018 10:40

Чтобы помочь читателям, у которых могло сложиться впечатление, что это может быть хорошей идеей.

Ole V.V. 21.12.2018 10:41

Может быть, есть какие-то встроенные функции, но после этого я тоже думаю, что это неплохая идея. Потому что во встроенной функции все такое же, как указано выше.

Md.ibrahim khalil 21.12.2018 10:42

Это легко, когда ты знаешь, как:

// Parse input.
String timeFromServer = "2018-11-27T09:51:31.832107+00:00";
OffsetDateTime odt = OffsetDateTime.parse(timeFromServer);

// Capture the current moment. 
OffsetDateTime now =  OffsetDateTime.now(ZoneOffset.UTC)

// Get the difference
Duration difference = Duration.between(odt,now);

// Extract details: Convert to minutes and seconds
long minutes = difference.toMinutes();
difference = difference.minusMinutes(minutes);
long seconds = difference.getSeconds();

// Format into string in desired form
String formattedDiff = String.format("%d min %d seconds", minutes, seconds);
System.out.println(formattedDiff);

При запуске сейчас мы получаем большое количество минут, так как ваша строка примера относится к прошлому месяцу.

34613 min 38 seconds

Единственная сложная часть - это разделение минут и секунд из объекта Duration. Сначала я вычитаю минуты, затем вычитаю их, чтобы остались только секунды (и меньше). Начиная с Java 9, в Duration улучшена поддержка получения отдельных единиц времени (см. Методы to…Part), но я полагаю, вы пока не можете использовать это на Android.

Когда это нужно только для расчета разницы, не имеет значения, какой часовой пояс или смещение вы передаете в OffsetDateTime.now.

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