【问题标题】:java/android - consistent way 3-letter abbreviation for TimeZonejava/android - TimeZone 的一致方式 3 字母缩写
【发布时间】:2018-12-18 19:47:30
【问题描述】:

如何在 Java 中为 TimeZone 获取三个字母的缩写

例如:TimeZone.getTimeZone("Pacific/Auckland").getDisplayName 给我:

GMT+12

但我想要NZSTNZDT

有可能吗?

【问题讨论】:

  • 似乎不太可能,因为Pacific/Auckland 时区既不是NZST 也不是NZDT。它在一年中的某些时间与NZST 具有相同的offset,在一年的其余时间与NZDT 具有相同的offset。但这两者的时区不同。
  • NZST 或 NZDT 中的任何一个都将取决于当前时间。但是您可以使用当前时间获取它们。看我的回答。

标签: java android android-studio gradle android-gradle-plugin


【解决方案1】:

试试这些

TimeZone timeZone = TimeZone.getTimeZone("Pacific/Auckland");
System.out.println(timeZone.getID());
System.out.println(timeZone.getRawOffset());
System.out.println(timeZone.getDisplayName(false, TimeZone.LONG));
System.out.println(timeZone.getDisplayName(false, TimeZone.SHORT));
System.out.println(timeZone.getDisplayName(true, TimeZone.LONG));
System.out.println(timeZone.getDisplayName(true, TimeZone.SHORT));

我认为这是你需要的:

System.out.println(timeZone.getDisplayName(true, TimeZone.SHORT));

【讨论】:

  • 我确实尝试过。但是,在 Android 中它返回 GMT+12:00
【解决方案2】:

使用 Joda-Time

DateTimeZone dz = DateTimeZone.forID("Pacific/Auckland");
String timezone = dz.getNameKey(DateTimeUtils.currentTimeMillis()); // NZST

在你的build.gradle 添加-

implementation 'joda-time:joda-time:2.10'

【讨论】:

  • 你确定AS支持DateTimeZone API吗?
  • “AS”是什么意思?我要求使用 Joda-Time 库。它按照 OP 的要求工作。
  • 我是说Android studio,AS不支持Joda-Time。
  • @Ibrahim,我刚试过,没问题。请参阅我的更新答案。
  • 它确实有效。不确定这是否会破坏或者是标准答案?我的意思是日期时区。 getNameKey 假设总是返回 3 个字母的代码??
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-28
  • 2016-08-27
相关资源
最近更新 更多