Идентификатор часового пояса, который следует использовать для непальского времени, равен Asia/Kathmandu
.Идентификаторы часовых поясов обычно имеют формат регион / город , где город является самой большой населенной областью в часовом поясе (не обязательно столицей; например, время, используемое в Пекине, составляет Asia/Shanghai
, а в Дели этоis Asia/Kolkata
).
Вы получаете набор поддерживаемых идентификаторов часовых поясов из ZoneId.getAvailableZoneIds()
.И "Asia/Kathmandu"
является членом возвращенного набора.
Языковой стандарт и часовой пояс представляют собой разные и не связанные понятия (даже если каждый из них часто ассоциируется с географической областью, но не всегда).Локаль имеет отношение к языку и культуре, а не ко времени.
Так, например, для преобразования времени 2018-10-08 20:42:53
в Соединенном Королевстве (Англия, Северная Ирландия, Уэльс и Шотландия) в время Непала:
DateTimeFormatter fromFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
ZoneId fromZone = ZoneId.of("Europe/London");
DateTimeFormatter toTimeFormatter = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT)
.withLocale(Locale.US);
ZoneId toZone = ZoneId.of("Asia/Kathmandu");
String englishDateTime = "2018-10-08 20:42:53";
ZonedDateTime dateTimeInEngland = LocalDateTime
.parse(englishDateTime, fromFormatter)
.atZone(fromZone);
LocalTime timeInNepal = dateTimeInEngland.withZoneSameInstant(toZone)
.toLocalTime();
System.out.println(timeInNepal.format(toTimeFormatter));
Вывод:
1:27 AM
Я использую java.time, современный Java-интерфейс даты и времени.Я предпочитаю использовать устаревшие классы даты и времени Date
, SimpleDateFormat
и Calendar
, которые вы использовали в вопросе.
Вопрос: Можно ли использовать java.time
на Android?
Да, java.time
прекрасно работает на устройствах Android.Для этого требуется как минимум Java 6 .
- В Java 8 и более поздних версиях и на новых устройствах Android (от уровня API 26, как мне сказали), новый API поставляется встроенным.
- В Java 6 и 7 получите ThreeTen Backport, бэкпорт новых классов (ThreeTen для JSR 310, где впервые был описан современный API).
- На (более старом) Android, используйте Android-версию ThreeTen Backport.Это называется ThreeTenABP.Убедитесь, что вы импортируете классы даты и времени из пакета
org.threeten.bp
и подпакетов.
Ссылки