java.time и ThreeTenABP
Это будет работать на вашем уровне API Android:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendPattern("d MMM uuuu hh:mm ")
.parseCaseInsensitive()
.appendPattern("a")
.toFormatter(Locale.US);
ZoneId zone = ZoneId.of("America/Chicago");
ZonedDateTime currentDateTime = ZonedDateTime.now(zone);
String dateTimeString = "2 Nov 2019 07:30 pm";
ZonedDateTime dateTime = LocalDateTime.parse(dateTimeString, formatter)
.atZone(zone);
long diffInHours = ChronoUnit.HOURS.between(currentDateTime, dateTime);
System.out.println("Difference in hours: " + diffInHours);
Когда я только что запустил этот фрагмент, вывод был:
Разница в часах: 541
Я использую java.time, современный Java-интерфейс даты и времени. С ним гораздо приятнее работать, чем со старыми и плохо спроектированными Date
и SimpleDateFormat
. С одной стороны, для синтаксического анализа строчных букв am
и pm
требуется немного больше строк кода (поскольку они обычно пишутся в верхнем регистре в США), с другой стороны, java.time проверяет более строго, что всегда хорошо. Преимущества, которые мы получаем бесплатно, включают: нам не нужны преобразования часовых поясов, мы можем делать все в центральное время. Вычисление разницы в часах встроено, требуется только один вызов метода.
Укажите языковой стандарт для вашего средства форматирования, или он сломается, когда однажды ваш код будет работать на JVM с неанглийским языковым стандартом по умолчанию. Укажите Центральное время США как Америка / Чикаго. Всегда используйте этот формат регион / город для часовых поясов. CST устарел и также лжет, так как он дает вам CDT в это время года.
Вопрос: Разве java.time не требует Android API уровня 26 или выше?
java.time работает хорошона старых и новых устройствах Android. Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на более новых устройствах Android (от уровня API 26) современный API поставляется встроенным.
- В не-Android Java 6 и 7 получают ThreeTen Backport, бэкпорт современных классов (ThreeTen для JSR 310; см. Ссылки внизу).
- На (более старых) Android используется Androidиздание ThreeTen Backport. Это называется ThreeTenABP. И убедитесь, что вы импортируете классы даты и времени из
org.threeten.bp
с подпакетами.
Ссылки