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

Java中将dd-MM-yyyy字符串转换为ISO 8601 DateTime格式的实现问题

日期转换实现方案

原代码错误点

  • new DateTime(String)方法无法识别dd-MM-yyyy格式的输入,会直接抛出格式异常
  • SimpleDateFormat的parse()入参仅支持字符串类型,不能直接传入DateTime实例
  • 目标格式的Z代表UTC时区,未显式指定时区会引入系统默认时区偏移,导致时间错误
  • 时间类型本身无格式属性,格式仅用于字符串和时间类型的互相转换,不需要对时间对象做二次解析

正确实现

方案1:适配Joda Time DateTime类

你代码中用到的DateTime属于Joda Time库,对应实现如下:

import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class DateConvert {
    public static void main(String[] args) {
        String toDateString= "15-08-2021";
        // 定义输入格式解析器,指定UTC时区
        DateTimeFormatter inputFormatter = DateTimeFormat.forPattern("dd-MM-yyyy").withZoneUTC();
        // 解析得到DateTime对象
        DateTime dateTime = inputFormatter.parseDateTime(toDateString);
        // 定义目标输出格式
        DateTimeFormatter outputFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
        // 如需格式化后的字符串,直接打印即可
        String formatResult = outputFormatter.print(dateTime);
        System.out.println(formatResult); // 输出 2021-08-15T00:00:00Z
        // 如需DateTime类型数据,直接使用上面得到的dateTime即可
    }
}

方案2:Java 8+ 官方标准库实现(推荐)

Joda Time官方已建议迁移到Java 8及以上版本内置的java.time标准库,实现如下:

import java.time.LocalDate;
import java.time.ZoneOffset;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class DateConvert {
    public static void main(String[] args) {
        String toDateString= "15-08-2021";
        // 解析输入日期字符串
        LocalDate localDate = LocalDate.parse(toDateString, DateTimeFormatter.ofPattern("dd-MM-yyyy"));
        // 补全UTC时区0点时间,得到带时区的时间对象
        ZonedDateTime zonedDateTime = localDate.atStartOfDay(ZoneOffset.UTC);
        // 定义目标格式
        DateTimeFormatter targetFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
        // 格式化得到字符串
        String formatResult = zonedDateTime.format(targetFormatter);
        System.out.println(formatResult); // 输出 2021-08-15T00:00:00Z
        // 如需时间类型数据,直接使用zonedDateTime即可
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:57:02