Я получаю время от сервера, как этот 2018-11-27T09:51:31.832107+00:00, затем анализирую время так, как OffsetDateTime.parse. Я хочу провести различие между двумя временами OffsetDateTime.now - OffsetDateTime.parse.
После вычитания я должен показать прошедшее время в такой форме: 14 min 12 seconds. Как я могу сделать это правильно, чтобы получить временной промежуток?
@ OleV.V. После вычитания я должен показать время в этой форме 14 min 12 seconds
Спасибо за дополнительную точность, это значительно упрощает ответ на вопрос. Добавляя информацию, сделайте это в самом вопросе, чтобы у нас было все в одном месте (на этот раз я сделал это за вас).




У вас есть в Android метод, который называется "сравнить", он может вам помочь, см. Документацию здесь:
https://developer.android.com/reference/java/time/OffsetDateTime#compareTo(java.time.OffsetDateTime)
Преобразуйте два раза в миллисекунды и после этого вычтите вторые миллисекунды из первых миллисекунд, а затем отформатируйте результат в устную дату.
Плохая идея. Встроены методы поиска разницы.
Почему ты говоришь, что это плохая идея?
Чтобы помочь читателям, у которых могло сложиться впечатление, что это может быть хорошей идеей.
Может быть, есть какие-то встроенные функции, но после этого я тоже думаю, что это неплохая идея. Потому что во встроенной функции все такое же, как указано выше.
Это легко, когда ты знаешь, как:
// 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.
Вы что-нибудь искали / пробовали?