如何在Android中获取时区名称

如何在Android中获取时区名称,android,timezone,Android,Timezone,我想在我的android程序中显示时区的“名称”。如果是“GMT+8:00”,则显示“HongKong”;通过搜索,我发现getDisplayName函数应该与我的目的不同 ,int,java.util.Locale) 然而,在我自己的程序中,这个函数只显示“GMT+8:00”,但当我在Google开源项目中使用“getDisplayName”时,它将显示名称“HongKong” 有人知道这背后的原因吗?试试这个 TimeZone tz = TimeZone.getDefault(); Syst

我想在我的android程序中显示时区的“名称”。如果是“GMT+8:00”,则显示“HongKong”;通过搜索,我发现getDisplayName函数应该与我的目的不同

,int,java.util.Locale)

然而,在我自己的程序中,这个函数只显示“GMT+8:00”,但当我在Google开源项目中使用“getDisplayName”时,它将显示名称“HongKong”

有人知道这背后的原因吗?

试试这个

TimeZone tz = TimeZone.getDefault();
System.out.println(tz.getID());
getDisplayName
返回时区,
getId
返回时区位置名称。

由您决定! 您可以使用
Locale.getDefault()
Calendar
实例

Locale.getDefault()
不是时区,但指定设备中的语言

  • Calendar Calendar=Calendar.getInstance()
  • Locale.getDefault()

下面我举几个例子:

打印
Log.d(Log_标记,String.valueOf(TimeZone.getDefault())显示:

D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]

打印
Log.d(Log_标记,TimeZone.getDefault().getID())显示:

D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity:巴西/东部

打印
Log.d(Log_标记,String.valueOf(Locale.getDefault())显示:

D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity:fr\u fr

打印
Log.d(Log_标记,String.valueOf(calendar.getTimeZone())显示:

D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]

打印
Log.d(Log_标记,calendar.getTimeZone().getDisplayName())显示:

D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity: libcore.util.ZoneInfo[id="Brazil/East",mRawOffset=-10800000,mEarliestRawOffset=-10800000,mUseDst=true,mDstSavings=3600000,transitions=128]
D/MyActivity:heure normale de Barsilia

打印不带区域设置和时区短的时区displayName:

Log.d(Log_标记,calendar.getTimeZone().getDisplayName(false,TimeZone.SHORT))

显示输出:

D/MyActivity:GMT-03:00

打印不带区域设置和时区长度的时区displayName

Log.d(Log_标记,calendar.getTimeZone().getDisplayName(false,TimeZone.LONG))

显示输出:

D/MyActivity:heure normale de Barsilia

检查Javadoc以了解您正在使用的方法:

获取使用默认时区和指定区域设置的日历

请勾选此注释,以使您更清楚:


您可以通过以下代码找到当前时区

private String getTimeZone() {
        Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
        TimeZone zone = calendar.getTimeZone();
        return zone.getID();
}

我试过了。但这显示的是“亚洲/香港”,而不是确切的地点名称。但谢谢你的建议,这更接近我喜欢的表达方式。亚洲/香港是ID。你期待什么?你确定这是你要找的时区名称,而不仅仅是地点吗?香港可能是一个大城市,但它只是一个人口稠密的时区中的一个城市。我猜想这是因为时区的名称很多,包括仅仅是抵消。UTC+8实际上是世界上人口最多的时区,因此它有大量的名称,WST、IRKT、澳大利亚/珀斯和亚洲/新加坡。您必须找到
TimeZone
(可能还有
SimpleTimeZone
)的子类,它才能显示您想要的名称。