如何将格式为2022-12-23T07:20:00的字符串转换为ZonedDateTime?
问题解决:将"2022-12-23T07:20:00"转换为ZonedDateTime
你的代码报错有两个核心原因:
- 日期格式字符串与输入字符串不匹配:输入是
yyyy-MM-dd'T'HH:mm:ss格式(带'T'分隔符),但你用的是dd-MM-yyyy HH:mm:ss,格式完全不符,导致解析失败。 - 输入字符串没有包含时区信息,而ZonedDateTime必须关联一个时区,直接解析会缺少必要的时区数据。
正确实现方式
方法1:指定匹配格式,手动添加时区
String stringDate = "2022-12-23T07:20:00"; // 匹配输入的格式,保留'T'分隔符 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss"); // 先解析为LocalDateTime,再指定时区转换为ZonedDateTime LocalDateTime localDateTime = LocalDateTime.parse(stringDate, formatter); // 替换为你需要的时区,比如ZoneId.of("Asia/Shanghai") ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
方法2:利用ISO标准格式简化解析
你的输入符合ISO_LOCAL_DATE_TIME标准格式,可直接用内置格式器:
String stringDate = "2022-12-23T07:20:00"; LocalDateTime localDateTime = LocalDateTime.parse(stringDate); // 默认使用ISO_LOCAL_DATE_TIME ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("UTC")); // 指定目标时区
关键注意点
DateTimeFormatter的格式字符串必须和输入字符串的结构完全一致,包括分隔符、日期时间各部分的顺序。- ZonedDateTime强制要求时区信息,若输入无时区,需通过
atZone()手动指定(可使用系统默认时区或具体时区ID)。
内容的提问来源于stack exchange,提问作者Sunny DHIMAN
相关产品推荐
相关产品推荐

