Java带时区Datetime转换:已知偏移量-07:00,如何得到目标日期2018-06-05?
Java 带偏移量的日期时间转换至本地时区日期
嘿,这个需求用Java 8之后引入的java.time新日期时间API就能轻松搞定,比旧的Date/Calendar靠谱多了,咱们一步步来:
核心思路
你的输入是带时区偏移量的ISO-8601格式时间,咱们只需要先把它解析成带偏移的时间对象,再转换到本地时区,最后提取日期就行——完全不需要知道具体时区名称,有偏移量足够了。
完整代码示例
import java.time.LocalDate; import java.time.OffsetDateTime; import java.time.ZoneId; public class TimeZoneConversion { public static void main(String[] args) { // 输入的带偏移量时间字符串 String inputTime = "2018-06-04T21:00:00.000-07:00"; // 解析为带偏移的时间对象(自动识别ISO格式,不用写格式化器) OffsetDateTime offsetDateTime = OffsetDateTime.parse(inputTime); // 转换为本地时区的同一时刻,再提取日期 LocalDate localDate = offsetDateTime .atZoneSameInstant(ZoneId.systemDefault()) // 转到本地时区 .toLocalDate(); // 提取日期部分 // 输出结果,当本地时区是东八区时,结果就是2018-06-05 System.out.println(localDate); } }
关键细节解释
OffsetDateTime.parse():这个方法天生支持ISO-8601格式的时间字符串,包括末尾的-07:00偏移量,不用手动定义格式化规则,省心又准确。atZoneSameInstant(ZoneId.systemDefault()):把带偏移的时间转换为同一时刻的本地时区时间,保证时间点不会变,只是时区视角切换了。toLocalDate():从转换后的时区时间里提取纯日期部分,就是你要的2018-06-05。
比如如果你的本地时区是东八区(UTC+8),那输入的2018-06-04T21:00:00-07:00加上15小时的时差,正好是东八区的2018-06-05T12:00:00,对应的日期自然就是2018-06-05,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者pshemek
相关产品推荐
相关产品推荐

