Иорана! Привет с острова Пасхи!
Я использую 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](https://i.stack.imgur.com/rvhPV.png)
Местные имена TZ
Я всегда думал, что JodaTime имеет всю информацию о часовом поясе и не зависит от данных платформы. Я не знал, что они полагаются на базовую платформу для предоставления этих имен часовых поясов?
Есть ли какие-нибудь NameProvider
, которые я могу подключить к JodaTime, возможно, какая-то реализация основана исключительно на связанном TZData?
Или любым другим способом заставить его правильно печатать эти сокращения часовых поясов на Android?
Мауру-ур!