将时间字符串转换为ISO 8601格式

我正在尝试以 的格式创建字符串 *

我知道可以使用某些String拆分技术来做到这一点,但是我想知道是否有一种优雅的解决方案(只需最少的代码更改)。

以上都是时间字符串,我需要的最后一个是ISO

8601中的Date。http://tools.ietf.org/html/rfc3339#section-5.6

我已经尝试了一些类似的问题,例如在Java中将日期字符串转换为毫秒,但实际上并不能解决问题。

还尝试使用:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");

String nowAsString = df.format(new Date());

但是它仍然不执行任何字符串到字符串的转换。出现以下错误:

是否有人可以建议一些图书馆?

谢谢。

回答:

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)无关。

回答:

调用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" ) ) ;

以上是 将时间字符串转换为ISO 8601格式 的全部内容, 来源链接: utcz.com/qa/426975.html

回到顶部