问题
Is there any built-in method in java to return "+00:00"
for ZoneOffset
UTC? The getId()
method only return "Z"
.
My current approach is manual change it to "+00:00"
if the result is "Z"
public static String getSystemTimeOffset() {
String id = ZoneOffset.systemDefault().getRules().getOffset(Instant.now()).getId();
return "Z".equals(id) ? "+00:00" : id;
}
回答1:
private static DateTimeFormatter offsetFormatter = DateTimeFormatter.ofPattern("xxx");
public static String getSystemTimeOffset() {
ZoneOffset offset = ZoneId.systemDefault().getRules().getOffset(Instant.now());
return offsetFormatter.format(offset);
}
It turns out that a ZoneOffset
can be formatted just like a date-time object can (except there is no ZoneOffset.format
method, so we need to use the DateTimeFormatter.format
method and pass the zone offset). So it’s a matter of reading the documentation of DateTimeFormatter
. There are plenty of format pattern letters that you can use for formatting an offset: O
, X
, x
and Z
. And for each it makes a difference how many we put in the format. Uppercase X
will give you the Z
that you don’t want, so we can skip that. The examples seem to indicate that we can use lowercase x
or uppercase Z
here. For x
: “Three letters outputs the hour and minute, with a colon, such as '+01:30'.” Bingo.
Link: DateTimeFormatter documentation
来源:https://stackoverflow.com/questions/49790409/how-to-make-zoneoffset-utc-return-0000-instead-of-z