【发布时间】:2017-10-04 20:07:53
【问题描述】:
我有几个 UTC 格式的时区字符串,例如 "UTC+08:00", "UTC-05:00",问题是如何将这些 utc 格式的字符串转换为 Java 中的 java.util.TimeZone?
我尝试通过ZoneId进行如下转换,但没有成功:
ZoneId zoneId = ZoneId.of("UTC+08:00");
TimeZone timeZone = TimeZone.getTimeZone(zoneId);
我知道TimeZone timeZone = TimeZone.getTimeZone("Asia/Shanghai"); 可以,但我不知道"UTC+08:00" 和"Asia/Shanghai" 之间的映射
【问题讨论】:
-
哦,很抱歉犯了笔误。应该是“UTC+08:00”和“Asia/Shanghai”之间的映射,而不是“UTC+05:00”和“Asia/Shanghai”之间的映射。您的详细回答和温馨提示帮了我很多,非常感谢!
-
请提供更多上下文。从这个问题来看,我认为可能有比将字符串
UTC+08:00转换为TImeZone更好的解决方案。你从哪里得到的字符串?你想用TimeZone做什么? -
我得到了诸如“2017-05-05 05:05”之类的日期字符串,它是诸如“UTC+08:00”之类的区域字符串,我需要timeZone对象来组装SimpleDateFormat对象,并且然后解析日期字符串` SimpleDateFormat fromFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm"); fromFormat.setTimeZone(timeZone);日期 resultDate = format.parse(date)`
-
感谢您的上下文。在这种情况下,如果有任何方法可以使用
java.time包中的较新类,您很可能会想要。它们通常不易出错且使用起来更方便,它们也更适合您的特定工作。您可以使用其中一个答案,然后使用LocalDateTime.parse(yourDateString, DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm")).atOffset(zoneOffsetFromAnswer)或….atZone(zoneIdFromAnswer)。您也可以转换为Instant(甚至转换为Date,但您将尝试看看是否可以避免使用过时的Date类)。 -
据我了解您真正需要获得什么,您无需将
UTC+08:00映射到Asia/Shanghai。您只需要在UTC+08:00的时区或区域偏移中解释您的日期时间字符串。
标签: java date timezone zoneinfo