@Override public Time copy(Time from) { if (from == null) { return null; } return new Time(from.getTime()); }
@Override public void setTime(Text text, Time value) { text.set(Long.toString(value.getTime()).getBytes(UTF_8)); }
@Override public void writeTo(Output output, int number, Time time, boolean repeated) throws IOException { output.writeFixed64(number, time.getTime(), repeated); }
@Override public void writeTo(Output output, int number, Time time, boolean repeated) throws IOException { output.writeFixed64(number, time.getTime(), repeated); }
@Override public Timestamp cast(Time src, Class<?> toType, String... args) throws FailToCastObjectException { return new Timestamp(src.getTime()); }
@Override public Time copy(Time from, Time reuse) { if (from == null) { return null; } reuse.setTime(from.getTime()); return reuse; }
private int convertFromTime(Schema schema, Time date) { final LogicalType logicalType = schema.getLogicalType(); if (logicalType == LogicalTypes.timeMillis()) { // adopted from Apache Calcite final long time = date.getTime(); final long converted = time + (long) LOCAL_TZ.getOffset(time); return (int) (converted % 86400000L); } else { throw new RuntimeException("Unsupported time type."); } }
@Override public void serialize(Time record, DataOutputView target) throws IOException { if (record == null) { target.writeLong(Long.MIN_VALUE); } else { target.writeLong(record.getTime()); } }
/** * Convert Time to milliseconds. * * Note: Returned Time values from SQL it's milliseconds since January 1, 1970, 00:00:00 GMT. To get right interval * in milliseconds this value must be adjusted to current time zone. * * @param sqlTime Time value returned from SQL. */ private long convertToMilliseconds(Object sqlTime) { Time time0 = (Time)sqlTime; return time0.getTime() + TimeZone.getDefault().getOffset(time0.getTime()); }
public static ReadMapping timeReadMapping() { return longReadMapping(TIME, (resultSet, columnIndex) -> { /* * TODO `resultSet.getTime(columnIndex)` returns wrong value if JVM's zone had forward offset change during 1970-01-01 * and the time value being retrieved was not present in local time (a 'gap'), e.g. time retrieved is 00:10:00 and JVM zone is America/Hermosillo * The problem can be averted by using `resultSet.getObject(columnIndex, LocalTime.class)` -- but this is not universally supported by JDBC drivers. */ Time time = resultSet.getTime(columnIndex); return UTC_CHRONOLOGY.millisOfDay().get(time.getTime()); }); }
/** * Get or create a time value for the given time. * * @param time the time * @return the value */ public static ValueTime get(Time time) { return fromNanos(DateTimeUtils.nanosFromDate(time.getTime())); }
/** * @param time Time. */ public void doWriteTime(@Nullable Time time) { if (time== null) out.writeByte(GridBinaryMarshaller.NULL); else { out.unsafeEnsure(1 + 8); out.unsafeWriteByte(GridBinaryMarshaller.TIME); out.unsafeWriteLong(time.getTime()); } }
@Override public void setTime(int parameterIndex, Time x) throws SQLException { checkOpen(); if (x == null) { setNull(parameterIndex, Types.TIME); } else { setParameter(parameterIndex, formatLiteral("TIME", TIME_FORMATTER.print(x.getTime()))); } }
@Test public void testConvertTimestamp() throws SQLException { LocalDateTime dateTime = LocalDateTime.of(2001, 5, 6, 12, 34, 56); Date sqlDate = Date.valueOf(dateTime.toLocalDate()); Time sqlTime = Time.valueOf(dateTime.toLocalTime()); Timestamp sqlTimestamp = Timestamp.valueOf(dateTime); java.util.Date javaDate = java.util.Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant()); assertParameter(sqlTimestamp, Types.TIMESTAMP, (ps, i) -> ps.setTimestamp(i, sqlTimestamp)); assertParameter(sqlTimestamp, Types.TIMESTAMP, (ps, i) -> ps.setObject(i, sqlTimestamp)); assertParameter(new Timestamp(sqlDate.getTime()), Types.TIMESTAMP, (ps, i) -> ps.setObject(i, sqlDate, Types.TIMESTAMP)); assertParameter(new Timestamp(sqlTime.getTime()), Types.TIMESTAMP, (ps, i) -> ps.setObject(i, sqlTime, Types.TIMESTAMP)); assertParameter(sqlTimestamp, Types.TIMESTAMP, (ps, i) -> ps.setObject(i, sqlTimestamp, Types.TIMESTAMP)); assertParameter(sqlTimestamp, Types.TIMESTAMP, (ps, i) -> ps.setObject(i, javaDate, Types.TIMESTAMP)); assertParameter(sqlTimestamp, Types.TIMESTAMP, (ps, i) -> ps.setObject(i, dateTime, Types.TIMESTAMP)); assertParameter(sqlTimestamp, Types.TIMESTAMP, (ps, i) -> ps.setObject(i, "2001-05-06 12:34:56", Types.TIMESTAMP)); }
@Test public void testConvertTime() throws SQLException { LocalTime time = LocalTime.of(12, 34, 56); Time sqlTime = Time.valueOf(time); java.util.Date javaDate = new java.util.Date(sqlTime.getTime()); LocalDateTime dateTime = LocalDateTime.of(LocalDate.of(2001, 5, 6), time); Timestamp sqlTimestamp = Timestamp.valueOf(dateTime); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setTime(i, sqlTime)); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setObject(i, sqlTime)); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setObject(i, sqlTime, Types.TIME)); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setObject(i, sqlTimestamp, Types.TIME)); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setObject(i, javaDate, Types.TIME)); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setObject(i, dateTime, Types.TIME)); assertParameter(sqlTime, Types.TIME, (ps, i) -> ps.setObject(i, "12:34:56", Types.TIME)); }
@Test void testCalendar2Timestamp() { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(time); Time sqltime = sqlTimeConverter.convert(calendar); assertEquals(time, sqltime.getTime()); }
@Test void testDate2Timestamp() { Date date = new Date(time); Time sqltime = sqlTimeConverter.convert(date); assertEquals(time, sqltime.getTime()); }
@Test void testTimestamp2Timestamp() { Timestamp timestamp2 = new Timestamp(time); Time sqltime = sqlTimeConverter.convert(timestamp2); assertEquals(time, sqltime.getTime()); }
@Test void testSqlTime2Timestamp() { Time sqltime2 = new Time(time); Time sqltime = sqlTimeConverter.convert(sqltime2); assertEquals(time, sqltime.getTime()); }
@Test void testSqlDate2Timestamp() { java.sql.Date date = new java.sql.Date(time); Time sqltime = sqlTimeConverter.convert(date); assertEquals(time, sqltime.getTime()); }