我有一个表达式,如“ 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也很可爱,与时区偏移和时区无关.