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

在Java中如何将字符串日期转换为ISO日期格式?

没问题!下面我用Java 8及以上版本的java.time API(官方推荐的日期时间处理库,比老旧的Date/Calendar类更简洁、线程安全)来实现这两个日期转换场景:

场景1:将字符串日期转换为ISO 8601格式("2019-07-01T03:50:00.000Z")

要实现这个转换,核心步骤是:先把输入字符串解析为日期时间对象,再将其转换为UTC时区的ISO格式字符串。注意:你需要明确知道输入字符串的日期格式,否则解析会失败。

举个例子,假设输入字符串格式为"yyyy-MM-dd HH:mm:ss"(比如"2019-07-01 03:50:00"),实现代码如下:

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

public class DateConverter {
    public static void main(String[] args) {
        // 输入的日期字符串
        String inputDate = "2019-07-01 03:50:00";
        // 定义输入字符串的格式
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        
        // 解析为LocalDateTime对象
        LocalDateTime localDateTime = LocalDateTime.parse(inputDate, inputFormatter);
        
        // 转换为UTC时区的ISO 8601格式(带毫秒和Z后缀)
        String isoDate = localDateTime.atOffset(ZoneOffset.UTC)
                                      .format(DateTimeFormatter.ISO_INSTANT);
        
        System.out.println(isoDate); // 输出:2019-07-01T03:50:00.000Z
    }
}

如果你的输入字符串本身带时区信息,直接解析为ZonedDateTime再转UTC即可——比如输入是带时区的字符串,替换成ZonedDateTime.parse(inputDate, inputFormatter),再调用.withZoneSameInstant(ZoneOffset.UTC)转换时区。

场景2:将" Mon Jul 01 08:00:00 IST 2019 "转换为ISO格式"2019-07-01T03:00:00.000Z"

这个场景的关键点是:处理输入字符串的前后空格、识别IST时区(印度标准时间,UTC+5:30),然后转换为UTC时区。

实现代码如下:

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

public class SpecificDateConverter {
    public static void main(String[] args) {
        // 输入的日期字符串(注意前后有空格)
        String inputDate = " Mon Jul 01 08:00:00 IST 2019 ";
        // 定义输入字符串的格式,指定英文Locale确保缩写解析正确
        DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH);
        
        // 解析为ZonedDateTime对象(trim()去掉前后空格,指定IST对应的标准时区ID)
        ZonedDateTime zonedDateTime = ZonedDateTime.parse(inputDate.trim(), inputFormatter)
                                                  .withZoneSameInstant(ZoneId.of("Asia/Kolkata"));
        
        // 转换为UTC时区,并格式化为带毫秒的ISO 8601格式
        String isoDate = zonedDateTime.withZoneSameInstant(ZoneOffset.UTC)
                                      .format(DateTimeFormatter.ISO_INSTANT);
        
        System.out.println(isoDate); // 输出:2019-07-01T03:00:00.000Z
    }
}

说明:

  • 用Locale.ENGLISH确保月份、星期的英文缩写能正确解析;
  • Asia/Kolkata是IST对应的标准时区ID,比直接用IST更可靠(有些时区缩写可能重复);
  • trim()方法去掉字符串前后的空格,避免解析失败;
  • withZoneSameInstant(ZoneOffset.UTC)会将时间转换为UTC时区,保证输出的是正确的UTC时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:36:29