Android设备如何获取GMT格式的时区名称?
实现方案
问题原因
你当前调用的无参TimeZone.getDisplayName()默认返回时区的本地化缩写(如PST、CST等),不支持直接输出GMT±hh:mm格式的偏移标识,需要自行计算偏移量或使用新版时间API实现。
方案1:兼容java.util.TimeZone(适配你当前的调用方式)
直接计算时区偏移量格式化输出即可,代码如下:
TimeZone defaultTz = TimeZone.getDefault(); // 获取当前时间的实际偏移(包含夏令时调整,不需要的话替换为getRawOffset()) int offsetMs = defaultTz.getOffset(System.currentTimeMillis()); int offsetHours = offsetMs / (1000 * 60 * 60); int offsetMinutes = Math.abs((offsetMs / (1000 * 60)) % 60); // 格式化输出GMT±hh:mm格式 String gmtTimezone = String.format("GMT%+03d:%02d", offsetHours, offsetMinutes);
输出示例:GMT-07:00、GMT+08:00,完全符合需求。
方案2:Java 8及以上推荐(使用java.time新时间API)
Java 8引入的java.time包提供了更简洁的实现,无需手动计算偏移:
ZoneOffset currentOffset = ZonedDateTime.now().getOffset(); String gmtTimezone = "GMT" + currentOffset.getId().replace("Z", "+00:00");
注意事项:
ZoneOffset.getId()返回的UTC零时区标识为Z,需要手动替换为+00:00以统一格式- 该方案自动适配夏令时调整,不需要额外处理偏移计算
内容的提问来源于stack exchange,提问作者Hang
相关产品推荐
相关产品推荐

