tl; dr
Instant.parse( "2015-08-20T08:26:21.000Z" ) .toString()
2015-08-20T08:26:21Z
日期时间格式器
如果您只想消除
.000,则使用日期时间对象解析您的输入字符串值,然后以另一种格式生成该日期时间值的新字符串表示形式。
ISO 8601
顺便说一句,如果这是您的目标,那么问题的标题就没有意义,因为第一句中提到的两个字符串都是有效的ISO
8601格式的字符串。
2015-08-20T08:26:21.000Z
2015-08-20T08:26:21Z
java.time
Java
8和更高版本具有新的java.time包。这些新类取代了旧的java.util.Date/.Calendar和java.text.SimpleDateFormat类。那些旧班级令人困惑,麻烦和有缺陷。
瞬间
如果您只需要UTC时区,则可以使用
Instant该类。此类表示时间轴上的一个点,而与任何特定时区(基本上是UTC)无关。
DateTimeFormatter.ISO_INSTANT
调用Instant会
toString使用
DateTimeFormatter.ISO_INSTANT格式化程序实例生成日期时间值的String表示形式。此格式化程序会自动调整小数秒。如果该值具有整秒,则不会生成小数位(显然是问题所要的)。对于小数秒,根据需要,数字以3、6或9的组出现,以表示高达纳秒分辨率的值。注意:此格式可能超过ISO
8601的毫秒限制(小数点后3位)。
范例程式码
这是Java 8 Update 51中的一些示例代码。
String output = Instant.parse( "2015-08-20T08:26:21.000Z" ).toString( );System.out.println("output: " + output );输出:2015-08-20T08:26:21Z
更改为小数秒
.08
String output = Instant.parse( "2015-08-20T08:26:21.08Z" ).toString( );
输出:2015-08-20T08:26:21.080Z
如果对除UTC以外的任何时区感兴趣,请从中创建一个
ZonedDateTime对象
Instant。
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , ZoneId.of( "America/Montreal" ) ) ;



