@Override public void setDate(Text text, Date value) { text.set(Long.toString(MILLISECONDS.toDays(value.getTime())).getBytes(UTF_8)); }
public static long parseHiveDate(String value) { long millis = HIVE_DATE_PARSER.parseMillis(value); return TimeUnit.MILLISECONDS.toDays(millis); }
private static int parseDate(Slice slice, int offset, int length) { long millis = HIVE_DATE_PARSER.parseMillis(slice.toStringAscii(offset, length)); return toIntExact(MILLISECONDS.toDays(millis)); } }
private static SqlDate toDate(DateTime dateTime) { return new SqlDate((int) TimeUnit.MILLISECONDS.toDays(dateTime.getMillis())); } }
private static SqlDate toDate(DateTime dateDate) { long millis = dateDate.getMillis(); return new SqlDate(toIntExact(MILLISECONDS.toDays(millis))); }
private static SqlDate sqlDate(String dateString) throws ParseException { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); return new SqlDate(toIntExact(TimeUnit.MILLISECONDS.toDays(dateFormat.parse(dateString).getTime()))); } }
@Test public void testDate() throws Exception { Date expected = new Date(new DateTime(2001, 2, 3, 4, 5, 6, DateTimeZone.UTC).getMillis()); AccumuloRowSerializer serializer = serializerClass.getConstructor().newInstance(); byte[] data = serializer.encode(DATE, expected); deserializeData(serializer, data); Date actual = serializer.getDate(COLUMN_NAME); // Convert milliseconds to days so they can be compared regardless of the time of day assertEquals(MILLISECONDS.toDays(actual.getTime()), MILLISECONDS.toDays(expected.getTime())); }
@ScalarOperator(ADD) @SqlType(StandardTypes.DATE) public static long intervalYearToMonthPlusDate(@SqlType(StandardTypes.INTERVAL_YEAR_TO_MONTH) long left, @SqlType(StandardTypes.DATE) long right) { long millis = MONTH_OF_YEAR_UTC.add(TimeUnit.DAYS.toMillis(right), left); return TimeUnit.MILLISECONDS.toDays(millis); }
@ScalarOperator(ADD) @SqlType(StandardTypes.DATE) public static long datePlusIntervalYearToMonth(@SqlType(StandardTypes.DATE) long left, @SqlType(StandardTypes.INTERVAL_YEAR_TO_MONTH) long right) { long millis = MONTH_OF_YEAR_UTC.add(TimeUnit.DAYS.toMillis(left), right); return TimeUnit.MILLISECONDS.toDays(millis); }
@ScalarOperator(SUBTRACT) @SqlType(StandardTypes.DATE) public static long dateMinusIntervalYearToMonth(ConnectorSession session, @SqlType(StandardTypes.DATE) long left, @SqlType(StandardTypes.INTERVAL_YEAR_TO_MONTH) long right) { long millis = MONTH_OF_YEAR_UTC.add(TimeUnit.DAYS.toMillis(left), -right); return TimeUnit.MILLISECONDS.toDays(millis); }
@Test public void testLiteral() { long millis = new DateTime(2001, 1, 22, 0, 0, UTC).getMillis(); assertFunction("DATE '2001-1-22'", DATE, new SqlDate((int) TimeUnit.MILLISECONDS.toDays(millis))); }
@Test public void testCastToDate() { long millis = new DateTime(2001, 1, 22, 0, 0, UTC).getMillis(); assertFunction("cast(TIMESTAMP '2001-1-22 03:04:05.321' as date)", DATE, new SqlDate((int) TimeUnit.MILLISECONDS.toDays(millis))); }
@Test public void testCastToDate() { long millis = new DateTime(2001, 1, 22, 0, 0, UTC).getMillis(); assertFunction("cast(TIMESTAMP '2001-1-22 03:04:05.321 +07:09' as date)", DATE, new SqlDate((int) TimeUnit.MILLISECONDS.toDays(millis))); }
@Description("add the specified amount of date to the given date") @LiteralParameters("x") @ScalarFunction("date_add") @SqlType(StandardTypes.DATE) public static long addFieldValueDate(ConnectorSession session, @SqlType("varchar(x)") Slice unit, @SqlType(StandardTypes.BIGINT) long value, @SqlType(StandardTypes.DATE) long date) { long millis = getDateField(UTC_CHRONOLOGY, unit).add(DAYS.toMillis(date), toIntExact(value)); return MILLISECONDS.toDays(millis); }
@Test public void testLeast() { int days = (int) TimeUnit.MILLISECONDS.toDays(new DateTime(2012, 5, 23, 0, 0, UTC).getMillis()); assertFunction("least(DATE '2013-03-30', DATE '2012-05-23')", DATE, new SqlDate(days)); assertFunction("least(DATE '2013-03-30', DATE '2012-05-23', DATE '2012-06-01')", DATE, new SqlDate(days)); }
@Test public void testGreatest() { int days = (int) TimeUnit.MILLISECONDS.toDays(new DateTime(2013, 3, 30, 0, 0, UTC).getMillis()); assertFunction("greatest(DATE '2013-03-30', DATE '2012-05-23')", DATE, new SqlDate(days)); assertFunction("greatest(DATE '2013-03-30', DATE '2012-05-23', DATE '2012-06-01')", DATE, new SqlDate(days)); }
@Description("truncate to the specified precision in the session timezone") @ScalarFunction("date_trunc") @LiteralParameters("x") @SqlType(StandardTypes.DATE) public static long truncateDate(ConnectorSession session, @SqlType("varchar(x)") Slice unit, @SqlType(StandardTypes.DATE) long date) { long millis = getDateField(UTC_CHRONOLOGY, unit).roundFloor(DAYS.toMillis(date)); return MILLISECONDS.toDays(millis); }
@ScalarOperator(ADD) @SqlType(StandardTypes.DATE) public static long datePlusIntervalDayToSecond(@SqlType(StandardTypes.DATE) long left, @SqlType(StandardTypes.INTERVAL_DAY_TO_SECOND) long right) { if (MILLIS_OF_DAY.get(right) != 0) { throw new PrestoException(INVALID_FUNCTION_ARGUMENT, "Cannot add hour, minutes or seconds to a date"); } return left + TimeUnit.MILLISECONDS.toDays(right); }
@ScalarOperator(SUBTRACT) @SqlType(StandardTypes.DATE) public static long dateMinusIntervalDayToSecond(@SqlType(StandardTypes.DATE) long left, @SqlType(StandardTypes.INTERVAL_DAY_TO_SECOND) long right) { if (MILLIS_OF_DAY.get(right) != 0) { throw new PrestoException(INVALID_FUNCTION_ARGUMENT, "Cannot subtract hour, minutes or seconds from a date"); } return left - TimeUnit.MILLISECONDS.toDays(right); }
@ScalarOperator(ADD) @SqlType(StandardTypes.DATE) public static long intervalDayToSecondPlusDate(@SqlType(StandardTypes.INTERVAL_DAY_TO_SECOND) long left, @SqlType(StandardTypes.DATE) long right) { if (MILLIS_OF_DAY.get(left) != 0) { throw new PrestoException(INVALID_FUNCTION_ARGUMENT, "Cannot add hour, minutes or seconds to a date"); } return TimeUnit.MILLISECONDS.toDays(left) + right; }