Java如何将日期时间字符串转换为Zulu日期时间格式
转换实现方案
Zulu时间即UTC+0时区时间,转换时需要先明确输入日期
2021-09-27 16:32:36对应的所属时区,以下默认以国内常用的东八区(UTC+8)为例演示不同主流开发语言的实现:
Java 8+ 实现
使用官方推荐的java.time包处理,避免旧Date类的时区问题:
import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; public class DateConvertDemo { public static void main(String[] args) { // 定义输入、输出格式 DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); DateTimeFormatter zuluFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); // 按输入所属时区解析时间 LocalDateTime localTime = LocalDateTime.parse("2021-09-27 16:32:36", inputFormatter); ZonedDateTime shanghaiTime = ZonedDateTime.of(localTime, ZoneId.of("Asia/Shanghai")); // 转换为UTC时区后格式化 ZonedDateTime utcTime = shanghaiTime.withZoneSameInstant(ZoneId.of("UTC")); String result = utcTime.format(zuluFormatter); // 输出结果:2021-09-27T08:32:36.000Z System.out.println(result); } }
Python 实现
from datetime import datetime import pytz # 按东八区解析输入时间 input_time = datetime.strptime("2021-09-27 16:32:36", "%Y-%m-%d %H:%M:%S").replace(tzinfo=pytz.timezone("Asia/Shanghai")) # 转UTC时区后格式化,截取前3位毫秒 zulu_time = input_time.astimezone(pytz.UTC).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z" # 输出结果:2021-09-27T08:32:36.000Z print(zulu_time)
JavaScript 实现
// 明确指定输入时间为东八区,避免时区歧义 const inputTime = new Date('2021-09-27T16:32:36+08:00'); // JS内置的toISOString方法直接输出符合要求的Zulu格式 const zuluTime = inputTime.toISOString(); // 输出结果:2021-09-27T08:32:36.000Z console.log(zuluTime);
注意事项
- 如果输入时间本身就是UTC时区的,不需要做时区偏移,直接解析后补毫秒和Z后缀即可,输出结果为
2021-09-27T16:32:36.000Z - 不要直接在原时间字符串后拼接T和Z后缀,会导致时区逻辑错误
内容的提问来源于stack exchange,提问作者rogger
相关产品推荐
相关产品推荐

