Список поддерживаемых локалей Times - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно получить Locale Time of the Непал, но я не смог пройти через это.Как получить местное время для Непала, которое GMT ​​+ 5: 45?Как я могу пройти через это?Как поменять локаль на английский по нашему местному времени?Здесь дата на английском языке.

Date d = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",Locale.ENGLISH).parse(date);
    Calendar cal = Calendar.getInstance();
    cal.setTime(d);
    String timeName = new SimpleDateFormat("hh:mm a").format(cal.getTime());
    return timeName;

1 Ответ

0 голосов
/ 05 октября 2018

Идентификатор часового пояса, который следует использовать для непальского времени, равен 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 и подпакетов.

Ссылки

...