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;
}
ZoneOffset extends ZoneId and defines the fixed offset of the current time-zone with GMT/UTC, such as +02:00. This means that this number represents fixed hours and minutes, representing the difference between the time in current time-zone and GMT/UTC: LocalDateTime now = LocalDateTime.
A ZoneId is used to identify the rules used to convert between an Instant and a LocalDateTime . There are two distinct types of ID: Fixed offsets - a fully resolved offset from UTC/Greenwich, that uses the same offset for all local date-times.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With