java 8获取当前日期的字符串值,偏移量为

时间:2017-11-08 14:21:25

标签: java datetime

我想以这种格式获取当前日期“2017-09-07T11:55:32 + 00:00” 但并不过分熟悉如何在Java 8中做到这一点..已经尝试过了

    LocalDateTime now = LocalDateTime.now();
    DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
    String todaysDateTime = now.format(formatter);

给我一​​个错误

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: 
OffsetSeconds

任何人都知道我是怎么做到的?

1 个答案:

答案 0 :(得分:3)

OffsetDateTime odt = now.atOffset(ZoneOffset.ofHoursMinutes(1, 0));
System.out.println(odt);

所有时间变体的toString已经提供相应的ISO格式。

2017-11-08T15:31:04.115+01:00

然而,它将代替+00:00给出Z.同样给出毫秒。所以要么使用这个标准,要么制作自己的模式。

您的格式为:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssxxx");

其中小x(而不是X)没有“Z”替换,冒号:需要xxx。

因此得到的字符串可以得到(感谢@ OleV.V。):

OffsetDateTime.now(ZoneOffset.UTC)
    .format(DateTimeFormatter.‌​ofPattern("yyyy-MM-d‌​d'T'HH:mm:ssxxx"))

另一个方向:

LocalDateTime包裹了一段很长的时间,从那以后计算了几毫秒。它不再保留OffsetDateTime中的偏移量。

OffsetDateTime odt = fmt.parse(inputString);
Instant instant = odt.toInstant(); // Bare bone UTC time.
LocalDateTime ldt = LocalDateTime.ofInstant(odt.toInstant(), ZoneId.of("UTC")); // UTC too.

(这比我想象的要复杂一点。)