在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
相关产品推荐
相关产品推荐

