You need to enable JavaScript to run this app. Java中如何将日期与时分格式字符串分别转换为Date对象
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何将日期与时分格式字符串分别转换为Date对象

Java 指定格式字符串转换为 Date 对象的实现方案

核心实现思路

转换时需要严格匹配输入字符串的内容特征,同时注意两个输入本身的信息完整性缺陷:

  • 输入"2021-05-9"仅包含年月日信息,解析后需要补充默认时分秒才能转换为完整时间点的Date对象
  • 输入"23:59:00"仅包含时分秒信息,不存在有效日期基准,必须指定业务认可的基准日期(如当前日期、同业务关联的固定日期),拼接后才能转换为有实际意义的Date对象

推荐实现(Java 8+ 官方标准)

优先使用java.time包下的新时间API,该API线程安全、解析规则严谨,是当前Java处理时间的标准方案:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class StringToDateTest {
    // 适配无前置零的日期格式,自动兼容个位数/两位数的月、日
    private static final DateTimeFormatter DATE_PARSER = DateTimeFormatter.ofPattern("yyyy-M-d");
    // 适配24小时制的时分秒格式
    private static final DateTimeFormatter TIME_PARSER = DateTimeFormatter.ofPattern("HH:mm:ss");

    public static void main(String[] args) {
        String dayInput = "2021-05-9";
        String timeInput = "23:59:00";

        // 1. 转换日期字符串:解析年月日,取当日0点作为完整时间点,再转Date
        LocalDate parsedDay = LocalDate.parse(dayInput, DATE_PARSER);
        Date dayResult = Date.from(
                parsedDay.atStartOfDay(ZoneId.systemDefault()).toInstant()
        );

        // 2. 转换时间字符串:以刚才解析到的2021-05-9作为基准日期,绑定解析到的时分秒后转Date
        // 可根据业务需求替换基准日期为任意指定日期
        LocalTime parsedTime = LocalTime.parse(timeInput, TIME_PARSER);
        Date timeResult = Date.from(
                parsedDay.atTime(parsedTime).atZone(ZoneId.systemDefault()).toInstant()
        );
    }
}

实现注意点

  • 时区选择:示例使用系统默认时区做转换,如果需要固定时区(如东八区、UTC),替换ZoneId.systemDefault()为对应时区常量即可,避免跨环境运行的时间偏差
  • 无特殊需求的场景,可直接保留LocalDate/LocalDateTime类型做业务处理,无需强制转换为旧版java.util.Date对象

兼容旧Java版本的实现

如果项目仍在使用Java 8之前的版本,可使用SimpleDateFormat做解析,注意该类线程不安全,禁止作为静态全局对象复用,每次使用需新建实例:

import java.text.SimpleDateFormat;
import java.util.Date;

public class LegacyStringToDateTest {
    public static void main(String[] args) throws Exception {
        String dayInput = "2021-05-9";
        String timeInput = "23:59:00";

        // 转换日期字符串
        SimpleDateFormat dayParser = new SimpleDateFormat("yyyy-M-d");
        Date dayResult = dayParser.parse(dayInput);

        // 转换时间字符串:拼接基准日期为"2021-05-9"后解析完整时间
        SimpleDateFormat timeParser = new SimpleDateFormat("yyyy-M-d HH:mm:ss");
        Date timeResult = timeParser.parse(dayInput + " " + timeInput);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 10:06:09