Java Android中缺少JodaTime时区缩写

Java Android中缺少JodaTime时区缩写,java,android,timezone,jodatime,tzdata,Java,Android,Timezone,Jodatime,Tzdata,伊奥拉娜!复活节岛的问候 我正在Android中使用JodaTime 2.10.6打印日期的时区缩写,如EAST、PDT、GMT、EEST: DateTimeZone zoneEasterIsland = DateTimeZone.forID("Pacific/Easter"); DateTime nowEasterIsland = DateTime.now(zoneEasterIsland); long millis = nowEasterIsland.getMillis(

伊奥拉娜!复活节岛的问候

我正在Android中使用JodaTime 2.10.6打印日期的时区缩写,如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名称(错误):

  • JDK TZ名称(良好):

我一直认为JodaTime拥有所有时区信息,并且与平台数据无关。我不知道他们依赖底层平台来提供这些时区名称

是否有任何
NameProvider
可用,我可以将其插入到JodaTime中,或者是一些完全基于捆绑数据的实现

或者我可以用其他方法让它在Android上正确打印这些时区缩写


毛鲁尔

如果其他方法都失败了,您可以迁移到java.time,这是现代java日期和时间API,在某种意义上是Joda time的继承者。如果API级别低于26,那么通过后端口,。我已经尝试了Java8和310ABP。这是同样的问题,Android上没有缩写,但在普通JDK上有。