Аббревиатуры часовых поясов JodaTime отсутствуют в Android - PullRequest
3 голосов
/ 20 июня 2020

Иорана! Привет с острова Пасхи!

Я использую JodaTime 2.10.6 в Android, чтобы распечатать сокращения часовых поясов для таких дат, как EAST, PDT, GMT, EEST:

DateTimeZone zoneEasterIsland = DateTimeZone.forID("Pacific/Easter");
DateTime nowEasterIsland = DateTime.now(zoneEasterIsland);
long millis = nowEasterIsland.getMillis();

String key = zoneEasterIsland.getNameKey(millis);
String shortName = zoneEasterIsland.getShortName(millis);
String name = zoneEasterIsland.getName(millis);
String shortNameLocalized = zoneEasterIsland.getShortName(millis, Locale.US);
String nameLocalized = zoneEasterIsland.getName(millis, Locale.US);

System.out.println("JodaTime Key:                  " + key );
System.out.println("JodaTime Short Name:           " + shortName );
System.out.println("JodaTime Name:                 " + name );
System.out.println("JodaTime Short Name Localized: " + shortNameLocalized );
System.out.println("JodaTime Name Localized:       " + nameLocalized );

на любом Android устройство, это печатает:

JodaTime Key:                  -06
JodaTime Short Name:           GMT-06:00
JodaTime Name:                 Easter Island Standard Time
JodaTime Short Name Localized: GMT-06:00
JodaTime Name Localized:       Easter Island Standard Time

... но я хотел получить EAST или EASST, и я не могу получить ни одного из них!

Если я запускаю тот же код в локальном модульном тесте (выполняется на компьютере, а не Android), я получаю желаемые результаты:

JodaTime Key:                  -06
JodaTime Short Name:           EAST
JodaTime Name:                 Easter Is. Time
JodaTime Short Name Localized: EAST
JodaTime Name Localized:       Easter Is. Time

Я отлаживаю, почему, а JodaTime использует DefaultNameProvider, который очевидно, получает все группы имен часовых поясов от самой платформы: DateFormatSymbols.getZoneStrings() по-разному реализован в JDK и в Android.

Android, похоже, попадает в libcore.icu, которые реализованы изначально, и похоже, отсутствуют сокращения для большинства из 600 предоставленных часовых поясов. Однако в JDK есть почти все из них! Ни одна из реализаций не подлежит отладке.

  • Android Имена TZ (плохо):

Android TZ Names

  • JDK TZ names (good):

Местные имена TZ

Я всегда думал, что JodaTime имеет всю информацию о часовом поясе и не зависит от данных платформы. Я не знал, что они полагаются на базовую платформу для предоставления этих имен часовых поясов?

Есть ли какие-нибудь NameProvider, которые я могу подключить к JodaTime, возможно, какая-то реализация основана исключительно на связанном TZData?

Или любым другим способом заставить его правильно печатать эти сокращения часовых поясов на Android?

Мауру-ур!

...