如何从字符串创建UTC时区的java.util.TimeZone对象?
获取UTC+4对应的java.util.TimeZone对象
问题原因
TimeZone.getTimeZone("UTC+4:00")返回GMT是因为该方法不识别"UTC+4:00"这种格式的时区ID,当传入的ID无法匹配时,会默认返回GMT时区。
解决方法
方法1:使用GMT偏移格式
直接使用GMT+4或GMT+04:00作为时区ID,这是TimeZone类认可的格式:
val timeZone = TimeZone.getTimeZone("GMT+4") print(timeZone)
输出结果:
sun.util.calendar.ZoneInfo[id="GMT+04:00",offset=14400000,dstSavings=0,useDaylight=false,transitions=0,lastRule=null]
这个对象的偏移量是14400000毫秒(即4小时),完全符合UTC+4的需求。
方法2:借助Java 8+的java.time API转换
如果项目使用Java 8及以上版本,推荐用java.time包的API先创建偏移量,再转换为TimeZone对象,兼容性更好:
import java.time.ZoneOffset import java.util.TimeZone val zoneOffset = ZoneOffset.of("+04:00") val timeZone = TimeZone.getTimeZone(zoneOffset) print(timeZone)
同样会得到正确的UTC+4时区对象。
方法3:使用IANA标准时区ID
如果需要对应实际地区的时区(部分地区常年处于UTC+4且无夏令时),可以使用IANA时区ID,比如Asia/Dubai:
val timeZone = TimeZone.getTimeZone("Asia/Dubai") print(timeZone)
输出的时区对象偏移量同样为UTC+4,且包含该地区的时区规则。
内容的提问来源于stack exchange,提问作者user15941734
相关产品推荐
相关产品推荐

