当前位置: 首页 > 面试题库 >

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

田慈
2023-03-14
问题内容

我正在尝试以 2015-08-20T08:26:21.000Z*
2015-08-20T08:26:21Z 的格式创建字符串
*

我知道可以使用某些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());

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

23:04:13,829警告[RuntimeExceptionMapper]捕获了RuntimeException:{}:java.lang.IllegalArgumentException:无法将给定对象格式化为日期

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

谢谢。


问题答案:
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" ) ) ;


 类似资料:
  • 因此,有一个关于web应用程序的部分,用户可以向其中输入事件,web服务将这些事件以以下格式发送到移动应用程序: 我在尝试将字符串转换为日期时遇到了问题,这样我就可以从事件中获得时间(也可以在正确的时区中格式化),例如,这里有一个出现在“2015-03-20T20:00:00-07:00”上的字符串,当我拉动时,时间应该是太平洋时间1PM。但我得到的不是8PM就是3AM(这取决于我是否将UTC缩写

  • 问题内容: 我一直在寻找一种将字符串(以纪元时间)转换为日期的方法。 基本上,我需要使用this:(以字符串形式)并将其放入this:中。 我一直在看strptime和strftime,但似乎都没有为我工作。有什么建议么? 编辑:谢谢,伙计们。我将其转换为int ,将其转换为,然后在其上运行。完美地工作! 问题答案: 如果只有该值是整数而不是字符串,则可以调用。如果只有某种方法可以将字符串转换为整

  • 问题内容: 我正在开发一个具有聚类列的时间序列数据模型,即 我希望针对分区列“ id”和集群列“ time”执行选择。例如,id:=‘1’,时间戳:=‘2017-10-09’ 检查iterable.Close()的err后,发现编组错误 {“错误”:[“无法将字符串编组为时间戳”]} 我该如何解决? 问题答案: 这是我最后通过将字符串文字(带有时间戳)转换为类型time来解决此问题的方法。

  • 我想将字符串time < code > " 2019-06-20 13:30:31 " 转换为int ,我尝试使用以下代码,但得到的是< code>10190101,我的尝试有什么问题吗?

  • 问题内容: 使用PHP,我想将UNIX时间戳转换为类似于以下内容的日期字符串: 如何转换的时间戳,如到? 问题答案: 尝试这样: