@Override public Date parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { try { return new Date(Long.parseLong(value)); } catch (NumberFormatException e) { throw new InvalidTypeException( String.format("Cannot parse timestamp value from \"%s\"", value)); } } try { return ParseUtils.parseDate(value); } catch (ParseException e) { throw new InvalidTypeException( String.format("Cannot parse timestamp value from \"%s\"", value)); } }
@Override public LocalDate parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // single quotes are optional for long literals, mandatory for date patterns // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { long unsigned; try { unsigned = Long.parseLong(value); } catch (NumberFormatException e) { throw new InvalidTypeException( String.format("Cannot parse date value from \"%s\"", value), e); } try { int days = CodecUtils.fromCqlDateToDaysSinceEpoch(unsigned); return LocalDate.fromDaysSinceEpoch(days); } catch (IllegalArgumentException e) { throw new InvalidTypeException( String.format("Cannot parse date value from \"%s\"", value), e); } } try { Date date = ParseUtils.parseDate(value, pattern); return LocalDate.fromMillisSinceEpoch(date.getTime()); } catch (ParseException e) { throw new InvalidTypeException( String.format("Cannot parse date value from \"%s\"", value), e); } }
@Override public Date parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { try { return new Date(Long.parseLong(value)); } catch (NumberFormatException e) { throw new InvalidTypeException(String.format("Cannot parse timestamp value from \"%s\"", value)); } } try { return ParseUtils.parseDate(value); } catch (ParseException e) { throw new InvalidTypeException(String.format("Cannot parse timestamp value from \"%s\"", value)); } }
@Override public Date parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { try { return new Date(Long.parseLong(value)); } catch (NumberFormatException e) { throw new InvalidTypeException(String.format("Cannot parse timestamp value from \"%s\"", value)); } } try { return ParseUtils.parseDate(value); } catch (ParseException e) { throw new InvalidTypeException(String.format("Cannot parse timestamp value from \"%s\"", value)); } }
@Override public Date parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { try { return new Date(Long.parseLong(value)); } catch (NumberFormatException e) { throw new InvalidTypeException(String.format("Cannot parse timestamp value from \"%s\"", value)); } } try { return ParseUtils.parseDate(value); } catch (ParseException e) { throw new InvalidTypeException(String.format("Cannot parse timestamp value from \"%s\"", value)); } }
@Override public Long parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // single quotes are optional for long literals, mandatory for date patterns // strip enclosing single quotes, if any if (isQuoted(value)) value = unquote(value); if (isLongLiteral(value)) { try { return parseLong(value); } catch (NumberFormatException e) { throw new InvalidTypeException( String.format("Cannot parse timestamp value from \"%s\"", value), e); } } try { return parseDate(value).getTime(); } catch (ParseException e) { throw new InvalidTypeException( String.format("Cannot parse timestamp value from \"%s\"", value), e); } }
@Override public Integer parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // single quotes are optional for long literals, mandatory for date patterns // strip enclosing single quotes, if any if (isQuoted(value)) value = unquote(value); if (isLongLiteral(value)) { long unsigned; try { unsigned = Long.parseLong(value); } catch (NumberFormatException e) { throw new InvalidTypeException( String.format("Cannot parse date value from \"%s\"", value), e); } try { return fromCqlDateToDaysSinceEpoch(unsigned); } catch (IllegalArgumentException e) { throw new InvalidTypeException( String.format("Cannot parse date value from \"%s\"", value), e); } } try { Date date = parseDate(value, pattern); return (int) MILLISECONDS.toDays(date.getTime()); } catch (ParseException e) { throw new InvalidTypeException( String.format("Cannot parse date value from \"%s\"", value), e); } }
@Test(groups = "unit") public void should_round_up() throws ParseException { Date timestamp = parseDate("2011-02-03T04:05:16.789Z"); assertThat(MILLISECOND.roundUp(timestamp)).isEqualTo(parseDate("2011-02-03T04:05:16.789Z")); assertThat(SECOND.roundUp(timestamp)).isEqualTo(parseDate("2011-02-03T04:05:16.999Z")); assertThat(MINUTE.roundUp(timestamp)).isEqualTo(parseDate("2011-02-03T04:05:59.999Z")); assertThat(HOUR.roundUp(timestamp)).isEqualTo(parseDate("2011-02-03T04:59:59.999Z")); assertThat(DAY.roundUp(timestamp)).isEqualTo(parseDate("2011-02-03T23:59:59.999Z")); assertThat(MONTH.roundUp(timestamp)).isEqualTo(parseDate("2011-02-28T23:59:59.999Z")); assertThat(YEAR.roundUp(timestamp)).isEqualTo(parseDate("2011-12-31T23:59:59.999Z")); }
@Test(groups = "unit") public void should_round_down() throws ParseException { Date timestamp = parseDate("2011-02-03T04:05:16.789Z"); assertThat(MILLISECOND.roundDown(timestamp)).isEqualTo(parseDate("2011-02-03T04:05:16.789Z")); assertThat(SECOND.roundDown(timestamp)).isEqualTo(parseDate("2011-02-03T04:05:16.000Z")); assertThat(MINUTE.roundDown(timestamp)).isEqualTo(parseDate("2011-02-03T04:05:00.000Z")); assertThat(HOUR.roundDown(timestamp)).isEqualTo(parseDate("2011-02-03T04:00:00.000Z")); assertThat(DAY.roundDown(timestamp)).isEqualTo(parseDate("2011-02-03T00:00:00.000Z")); assertThat(MONTH.roundDown(timestamp)).isEqualTo(parseDate("2011-02-01T00:00:00.000Z")); assertThat(YEAR.roundDown(timestamp)).isEqualTo(parseDate("2011-01-01T00:00:00.000Z")); }
@Override public LocalDate parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // single quotes are optional for long literals, mandatory for date patterns // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { long unsigned; try { unsigned = Long.parseLong(value); } catch (NumberFormatException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } try { int days = CodecUtils.fromCqlDateToDaysSinceEpoch(unsigned); return LocalDate.fromDaysSinceEpoch(days); } catch (IllegalArgumentException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } } try { Date date = ParseUtils.parseDate(value, pattern); return LocalDate.fromMillisSinceEpoch(date.getTime()); } catch (ParseException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } }
@Override public LocalDate parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // single quotes are optional for long literals, mandatory for date patterns // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { long unsigned; try { unsigned = Long.parseLong(value); } catch (NumberFormatException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } try { int days = CodecUtils.fromCqlDateToDaysSinceEpoch(unsigned); return LocalDate.fromDaysSinceEpoch(days); } catch (IllegalArgumentException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } } try { Date date = ParseUtils.parseDate(value, pattern); return LocalDate.fromMillisSinceEpoch(date.getTime()); } catch (ParseException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } }
@Override public LocalDate parse(String value) { if (value == null || value.isEmpty() || value.equalsIgnoreCase("NULL")) return null; // single quotes are optional for long literals, mandatory for date patterns // strip enclosing single quotes, if any if (ParseUtils.isQuoted(value)) value = ParseUtils.unquote(value); if (ParseUtils.isLongLiteral(value)) { long unsigned; try { unsigned = Long.parseLong(value); } catch (NumberFormatException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } try { int days = CodecUtils.fromCqlDateToDaysSinceEpoch(unsigned); return LocalDate.fromDaysSinceEpoch(days); } catch (IllegalArgumentException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } } try { Date date = ParseUtils.parseDate(value, pattern); return LocalDate.fromMillisSinceEpoch(date.getTime()); } catch (ParseException e) { throw new InvalidTypeException(String.format("Cannot parse date value from \"%s\"", value), e); } }