
Actually, the task can be split in two subtasks:
- retrieving offset in the form which Vaadin can provide (integer number of milliseconds);
- formatting it so that we could construct ZoneId.
The first part can be handled with:
int offsetInt = getUI().getPage().getWebBrowser().getTimezoneOffset(); |
int offsetInt = getUI().getPage().getWebBrowser().getTimezoneOffset();
The second part can be handled this way:
private static final int MILLISECONDS_IN_HOUR = 3_600_000;
private static final int MILLISECONDS_IN_MINUTE = 60000;
private static final int SECONDS_IN_MINUTE = 60;
...
String offset = String.format("%02d:%02d",
Math.abs(offsetInt / MILLISECONDS_IN_HOUR),
Math.abs((offsetInt / MILLISECONDS_IN_MINUTE) % SECONDS_IN_MINUTE));
offset = (offsetInt >= 0 ? "+" : "-") + offset;
ZoneId zoneId = ZoneId.of(offset); |
private static final int MILLISECONDS_IN_HOUR = 3_600_000;
private static final int MILLISECONDS_IN_MINUTE = 60000;
private static final int SECONDS_IN_MINUTE = 60;
...
String offset = String.format("%02d:%02d",
Math.abs(offsetInt / MILLISECONDS_IN_HOUR),
Math.abs((offsetInt / MILLISECONDS_IN_MINUTE) % SECONDS_IN_MINUTE));
offset = (offsetInt >= 0 ? "+" : "-") + offset;
ZoneId zoneId = ZoneId.of(offset);
So, for offset -85*3600*100 milliseconds (-8.5 hours) you are supposed to get "-08:30" which is compliant with ZoneId.of() method.