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

如何将yyyy-MM-dd格式的Java短日期字符串转换为ZonedDateTime

报错根因

ZonedDateTime.parse()要求输入字符串必须包含完整的时间信息,你传入的2021-10-05仅包含日期字段,缺失时、分、秒等时间部分,所以无法直接解析为ZonedDateTime类型。


解决方案1(优先推荐,写法更简洁)

先将日期字符串解析为LocalDate,再通过内置方法补全默认时间并关联时区:

public static final ZoneId ZONE_ID = ZoneId.of("UTC");

// 你的日期字符串
String date = "2021-10-05";
ZonedDateTime dt2 = LocalDate.parse(date)
        // 自动补00:00:00并关联指定时区
        .atStartOfDay(ZONE_ID);

解决方案2(通过DateTimeFormatter配置默认值)

如果需要保留ZonedDateTime.parse()直接解析的写法,可以通过DateTimeFormatterBuilder为缺失的时间字段设置默认值:

import java.time.format.DateTimeFormatterBuilder;
import java.time.temporal.ChronoField;

public static final ZoneId ZONE_ID = ZoneId.of("UTC");
public static final DateTimeFormatter DATE_ONLY_FORMATTER = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd")
        // 为缺失的时间部分设置默认值
        .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
        .parseDefaulting(ChronoField.MINUTE_OF_HOUR, 0)
        .parseDefaulting(ChronoField.SECOND_OF_MINUTE, 0)
        .toFormatter()
        .withZone(ZONE_ID);

// 使用示例
String date = "2021-10-05";
ZonedDateTime dt2 = ZonedDateTime.parse(date, DATE_ONLY_FORMATTER);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:27:01