You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从字符串"06.03.2018 06:00 CET"获取ZonedDateTime或OffsetDateTime?

嘿,我一眼就看到问题出在哪了!你的代码里有两个关键错误导致了解析失败,咱们一步步来修正:

问题1:错误的年份格式符YYYY

你用的YYYY是周基年份(ISO周日期系统里的年份),它和我们日常用的公历年yyyy不是一回事。比如12月底的某些日期,周基年可能会算到下一年,而1月初的可能算到上一年,这就导致Java无法把你的日期字符串和周基年匹配,直接抛出异常。

问题2:时区缩写CET需要Locale支持

Java的DateTimeFormatter默认Locale可能不是欧洲地区的,这会导致它无法识别CET(中欧时间)这种地区性的时区缩写。咱们需要指定一个欧洲的Locale来让解析器正确识别这个时区。

修正后的代码

把YYYY改成yyyy,再加上合适的Locale,代码就能正常运行了:

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class DateTimeParser {
    public static void main(String[] args) {
        // 修正年份格式为yyyy,指定德国Locale以识别CET时区
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm z", Locale.GERMANY);
        ZonedDateTime zdt = ZonedDateTime.parse("06.03.2018 06:00 CET", dtf);
        System.out.println(zdt);
        // 输出类似:2018-03-06T06:00+01:00[Europe/Berlin]
    }
}

额外说明

如果你想解析成OffsetDateTime,其实也可以用同样的格式化器,只需要把ZonedDateTime.parse换成OffsetDateTime.parse就行。不过ZonedDateTime更适合处理像CET这种有夏令时切换的时区,因为它会保留时区的规则信息。

内容的提问来源于stack exchange,提问作者gknauth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:00:51