支持的语言环境时间列表

时间:2018-10-05 07:14:38

标签: android locale

我需要获取尼泊尔的语言环境时间,但无法通过。如何获取尼泊尔的语言环境时间(格林尼治标准时间+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 :(得分:1)

尼泊尔时间使用的时区ID为Asia/Kathmandu。时区ID的格式通常为 region / city ,其中city是时区中人口最多的区域(不一定是首都;例如,北京使用的时间为Asia/Shanghai,并且在德里是Asia/Kolkata)。

您从ZoneId.getAvailableZoneIds()获得了一组受支持的时区ID。 "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日期和时间API)。与您在问题中使用的过时的日期和时间类DateSimpleDateFormatCalendar相比,我更喜欢它。

问题:我可以在Android上使用java.time吗?

是的,java.time在Android设备上运行良好。它只需要至少 Java 6

  • 在Java 8和更高版本以及新的Android设备上(有人告诉我API级别为26),新的API是内置的。
  • 在Java 6和7中,获得了ThreeTen反向端口,即新类的反向端口(JSR 310的ThreeTen,首次描述了现代API)。
  • 在(较旧的)Android上,使用ThreeTen Backport的Android版本。叫做ThreeTenABP。确保从包org.threeten.bp和子包中导入日期和时间类。

链接