diff -r eef755718cb2 -r f527b24990d7 src/jdk.jfr/share/classes/jdk/jfr/consumer/TimeConverter.java --- a/src/jdk.jfr/share/classes/jdk/jfr/consumer/TimeConverter.java Wed Dec 05 09:34:01 2018 -0500 +++ b/src/jdk.jfr/share/classes/jdk/jfr/consumer/TimeConverter.java Wed Dec 05 16:40:12 2018 +0100 @@ -25,6 +25,12 @@ package jdk.jfr.consumer; +import java.time.DateTimeException; +import java.time.ZoneOffset; + +import jdk.jfr.internal.LogLevel; +import jdk.jfr.internal.LogTag; +import jdk.jfr.internal.Logger; import jdk.jfr.internal.consumer.ChunkHeader; /** @@ -34,11 +40,22 @@ private final long startTicks; private final long startNanos; private final double divisor; + private final ZoneOffset zoneOffet; - TimeConverter(ChunkHeader chunkHeader) { + TimeConverter(ChunkHeader chunkHeader, int rawOffset) { this.startTicks = chunkHeader.getStartTicks(); this.startNanos = chunkHeader.getStartNanos(); this.divisor = chunkHeader.getTicksPerSecond() / 1000_000_000L; + this.zoneOffet = zoneOfSet(rawOffset); + } + + private ZoneOffset zoneOfSet(int rawOffset) { + try { + return ZoneOffset.ofTotalSeconds(rawOffset / 1000); + } catch (DateTimeException dte) { + Logger.log(LogTag.JFR_SYSTEM_PARSER, LogLevel.INFO, "Could not create ZoneOffset from raw offset " + rawOffset); + } + return ZoneOffset.UTC; } public long convertTimestamp(long ticks) { @@ -48,4 +65,8 @@ public long convertTimespan(long ticks) { return (long) (ticks / divisor); } + + public ZoneOffset getZoneOffset() { + return zoneOffet; + } }