/** * Extract TimeZone from TIMESTAMPTZ. */ public static TimeZone extractTimeZone(byte[] bytes) { String regionName = null; if ((bytes[11] & -128) != 0) { int regionCode = (bytes[11] & 127) << 6; regionCode += ((bytes[12] & 252) >> 2); regionName = new String(ZONEIDMAP.getRegion(regionCode)); } else { int hourOffset = bytes[11] - 20; int minuteOffset = bytes[12] - 60; String offset = Helper.buildZeroPrefix(hourOffset, 2) + ":" + Helper.buildZeroPrefixWithoutSign(minuteOffset, 2); regionName = "GMT" + offset; } return TimeZone.getTimeZone(regionName); } }
/** * Converts {@link ZonedDateTime} to {@link TIMESTAMPTZ}. * * @param attribute the value to be converted, possibly {@code null} * @return the converted data, possibly {@code null} */ public static TIMESTAMPTZ zonedDateTimeToTimestamptz(ZonedDateTime attribute) { if (attribute == null) { return null; } byte[] bytes = newTimestamptzBuffer(); ZonedDateTime utc = attribute.withZoneSameInstant(UTC); writeDateTime(bytes, utc.toLocalDateTime()); String zoneId = attribute.getZone().getId(); int regionCode = ZONEIDMAP.getID(zoneId); if (isValidRegionCode(regionCode)) { writeZoneId(bytes, regionCode); } else { writeZoneOffset(bytes, attribute.getOffset()); } return new TIMESTAMPTZ(bytes); }
/** * Converts {@link ZonedDateTime} to {@link TIMESTAMPTZ}. * * @param attribute the value to be converted, possibly {@code null} * @return the converted data, possibly {@code null} */ public static TIMESTAMPTZ zonedDateTimeToTimestamptz(ZonedDateTime attribute) { if (attribute == null) { return null; } byte[] bytes = newTimestamptzBuffer(); ZonedDateTime utc = attribute.withZoneSameInstant(UTC); writeDateTime(bytes, utc.toLocalDateTime()); String zoneId = attribute.getZone().getId(); int regionCode = ZONEIDMAP.getID(zoneId); if (isValidRegionCode(regionCode)) { writeZoneId(bytes, regionCode); } else { writeZoneOffset(bytes, attribute.getOffset()); } return new TIMESTAMPTZ(bytes); }
/** * Extract TimeZone from TIMESTAMPTZ. */ public static TimeZone extractTimeZone(byte[] bytes) { String regionName = null; if ((bytes[11] & -128) != 0) { int regionCode = (bytes[11] & 127) << 6; regionCode += ((bytes[12] & 252) >> 2); regionName = new String(ZONEIDMAP.getRegion(regionCode)); } else { int hourOffset = bytes[11] - 20; int minuteOffset = bytes[12] - 60; String offset = Helper.buildZeroPrefix(hourOffset, 2) + ":" + Helper.buildZeroPrefixWithoutSign(minuteOffset, 2); regionName = "GMT" + offset; } return TimeZone.getTimeZone(regionName); } }