ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

将Java 8 ISO 8601持续时间表达式添加到java.util.Date

2019-11-08 20:11:41  阅读:306  来源: 互联网

标签:duration java-time iso8601 java date


我有一个表达式,如“ PT20.345S”,“ P2DT3H4M”等,如此处所述https://docs.oracle.com/javase/8/docs/api/java/time/Duration.html#parse-java.lang.CharSequence-

我如何解析它,将其添加到当前时间并获得java.util.Date对象?

都不起作用:

Date d1 = Date.from(LocalDateTime.now().plus(Duration.parse(_expression)));
Date d2 = Date.from(Duration.parse(_expression).addTo(LocalDateTime.now()));

解决方法:

Duration amountToAdd = Duration.parse("PT20.345S");  // Represent a span of time. Here, about twenty and a third seconds.
Instant now = Instant.now() ;                        // Capture the current moment in UTC.
Instant otherMoment = now.plus(amountToAdd);         // Add the span-of-time to the current moment, for a moment in the future (or in the past if the duration is negative).
String output = otherMoment.toString():              // Generate a String in standard ISO 8601 format.

2018-06-30T19:34:47Z

从现代的java.time类转换为遗留类.

Date date1 = Date.from(otherMoment);
System.out.println(date1);

我刚在欧洲/哥本哈根时区运行,得到了:

Sat Jun 30 21:34:47 CEST 2018

如果我使用您的其他示例持续时间字符串P2DT3H4M,则会得到:

Tue Jul 03 00:38:26 CEST 2018

或者,如果您喜欢一线客:

    Date date1 = Date.from(Instant.now().plus(Duration.parse("PT20.345S")));

java.util.Date类早已过时,因此理想情况下,您不希望拥有一个.如果仍然需要一个,通常是对于无法更改或现在不想更改的旧版API,则在使用现代Java日期和时间API java.time进行尽可能多的逻辑时,您正在正确考虑,并仅在最后转换为日期. Date在现代世界中最亲密的表亲是Instant,并且存在Instant和Date之间的直接转换,这就是我使用此类的原因. Instant也很可爱,与时区偏移和时区无关.

标签:duration,java-time,iso8601,java,date
来源: https://codeday.me/bug/20191108/2010173.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有