如何在Android中获取时区名称
我想在我的android程序中显示时区的“名称”。如果是“GMT+8:00”,则显示“HongKong”;通过搜索,我发现getDisplayName函数应该与我的目的不同 ,int,java.util.Locale) 然而,在我自己的程序中,这个函数只显示“GMT+8:00”,但当我在Google开源项目中使用“getDisplayName”时,它将显示名称“HongKong” 有人知道这背后的原因吗?试试这个如何在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
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
)的子类,它才能显示您想要的名称。