java .time и ThreeTenABP
Я предполагал, что вам нужна сегодняшняя дата в вашем часовом поясе.
String inputPa = "hh:mm a";
DateTimeFormatter timeFormatter12Hours = DateTimeFormatter.ofPattern(inputPa, Locale.ENGLISH);
ZoneId zone = ZoneId.of("America/Detroit");
String timeString = "11:34 AM";
LocalTime time = LocalTime.parse(timeString, timeFormatter12Hours);
Instant inst = LocalDate.now(zone).atTime(time).atZone(zone).toInstant();
System.out.println(inst);
Результат этого примера:
2020-05-30T15: 34: 00Z
Я бы не стал явно преобразовывать Instant
в строку. Он печатается в UT C в желаемом формате при печати, таким образом неявно вызывая свой метод toString
(формат - ISO 8601, международный стандарт).
Пожалуйста, укажите желаемый часовой пояс. Чтобы полагаться на настройки часового пояса устройства, установите zone
на ZoneId.systemDefault()
.
Я, конечно, счастлив использовать java .time, современный Java API даты и времени. Вы можете сделать это и в своей версии Android, см. Подробности ниже.
Вопрос: Разве 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
с подпакетами.
Ссылки