我正在尝试使用冒号格式化日期时间戳,包括时区。我进行了几次实验以获得结果。以下是我发现的内容。
Date date = new Date();
String zonedDateTimeFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
SimpleDateFormat sdf = new SimpleDateFormat(zonedDateTimeFormat);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(sdf.format(new Date(date.getTime())));
如果我将时区设置为UTC,我将获得这样的时间戳:
2020-11-03T21:14:07.449Z
。但如果时区不是UTCDate date = new Date();
String zonedDateTimeFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSXXX";
SimpleDateFormat sdf = new SimpleDateFormat(zonedDateTimeFormat);
System.out.println(sdf.format(new Date(date.getTime())));
时间戳应该像这样:
2020-11-03T22:19:43.804+01:00
我在想是否有可能获取一个以UTC时间为准的时间戳,例如:2020-11-03T21:14:07.449+00:00
,而不是以大写字母Z
结尾的时间戳?
sdf.format(new Date(date.getTime())).replace("Z", "+00:00")
- Rob Evansyyyy-MM-dd'T'HH:mm:ss.SSSZ
。唯一的缺点是冒号丢失了。 - flaxelSimpleDateFormat
和Date
。那些类设计得很糟糕,已经过时很久了,前者尤其是臭名昭著的麻烦。相反,使用来自Java.time,现代Java日期和时间API的OffsetDateTime
和DateTimeFormatter
。 - Ole V.V.