final LocalTime expectedTime = ((Temporal) expectedValue).query( TemporalQueries.localTime() ); final ZoneId expectedZoneId = ((Temporal) expectedValue).query( TemporalQueries.zone() ); LocalTime actualTime = ((Temporal) actualValue).query( TemporalQueries.localTime() ); ZoneId actualZoneId = ((Temporal) actualValue).query( TemporalQueries.zone() );
private Optional<LocalTime> getLocalTime(TemporalAccessor parsed) { return Optional.ofNullable(parsed.query(TemporalQueries.localTime())); } }
private Optional<LocalTime> getLocalTime(TemporalAccessor parsed) { return Optional.ofNullable(parsed.query(TemporalQueries.localTime())); } }
@Override protected XMLGregorianCalendar parseWithFormatter(String jsonValue, DateTimeFormatter formatter) { final TemporalAccessor parsed = formatter.parse(jsonValue); LocalTime time = parsed.query(TemporalQueries.localTime()); ZoneId zone = parsed.query(TemporalQueries.zone()); if (zone == null) { zone = UTC; } if (time == null) { time = ZERO_LOCAL_TIME; } ZonedDateTime result = LocalDate.from(parsed).atTime(time).atZone(zone); return datatypeFactory.newXMLGregorianCalendar(GregorianCalendar.from(result)); } }
@Override protected Calendar parseWithFormatter(String jsonValue, DateTimeFormatter formatter) { final TemporalAccessor parsed = formatter.parse(jsonValue); LocalTime time = parsed.query(TemporalQueries.localTime()); ZoneId zone = parsed.query(TemporalQueries.zone()); if (zone == null) { zone = UTC; } if (time == null) { time = ZERO_LOCAL_TIME; } ZonedDateTime result = LocalDate.from(parsed).atTime(time).atZone(zone); return GregorianCalendar.from(result); } }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.precision()) { return (R) ChronoUnit.ERAS; } if (query == TemporalQueries.chronology() || query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset() || query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { return null; } return query.queryFrom(this); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.precision()) { return (R) ChronoUnit.ERAS; } if (query == TemporalQueries.chronology() || query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset() || query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { return null; } return query.queryFrom(this); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.precision()) { return (R) ChronoUnit.ERAS; } if (query == TemporalQueries.chronology() || query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset() || query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { return null; } return query.queryFrom(this); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.precision()) { return (R) ChronoUnit.ERAS; } if (query == TemporalQueries.chronology() || query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset() || query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { return null; } return query.queryFrom(this); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.precision()) { return (R) ChronoUnit.ERAS; } if (query == TemporalQueries.chronology() || query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset() || query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { return null; } return query.queryFrom(this); }
@Override public PlainTime createFrom( TemporalAccessor threeten, AttributeQuery attributes ) { // lax mode not supported, we only look for existing complete types like OffsetTime etc. LocalTime localTime = threeten.query(TemporalQueries.localTime()); if (localTime != null) { if ( localTime.equals(LocalTime.MIDNIGHT) && threeten.query(DateTimeFormatter.parsedExcessDays()).equals(Period.ofDays(1)) ) { return PlainTime.midnightAtEndOfDay(); } else { return TemporalType.LOCAL_TIME.translate(localTime); } } return null; }
@Override public SumkDate queryFrom(TemporalAccessor temporal) { if (temporal instanceof LocalDateTime) { return SumkDate.of((LocalDateTime) temporal); } else if (temporal instanceof ZonedDateTime) { LocalDateTime dt = ((ZonedDateTime) temporal).toLocalDateTime(); return SumkDate.of(dt); } else if (temporal instanceof OffsetDateTime) { LocalDateTime dt = ((OffsetDateTime) temporal).toLocalDateTime(); return SumkDate.of(dt); } LocalDate date = temporal.query(TemporalQueries.localDate()); LocalTime time = temporal.query(TemporalQueries.localTime()); if (date == null && time == null) { return null; } return SumkDate.of(date, time); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.chronology()) { return (R) getChronology(); } else if (query == TemporalQueries.precision()) { return (R) ChronoUnit.DAYS; } else if (query == TemporalQueries.localDate()) { return (R) LocalDate.ofEpochDay(toEpochDay()); } else if (query == TemporalQueries.localTime() || query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset()) { return null; } return super.query(query); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.zoneId()) { return (R) zone; } else if (query == TemporalQueries.chronology()) { return (R) chrono; } else if (query == TemporalQueries.localDate()) { return date != null ? (R) LocalDate.from(date) : null; } else if (query == TemporalQueries.localTime()) { return (R) time; } else if (query == TemporalQueries.zone() || query == TemporalQueries.offset()) { return query.queryFrom(this); } else if (query == TemporalQueries.precision()) { return null; // not a complete date/time } // inline TemporalAccessor.super.query(query) as an optimization // non-JDK classes are not permitted to make this optimization return query.queryFrom(this); }
@Test public void testComposite4() { final FEELFnResult<TemporalAccessor> p1 = dateFunction.invoke("2017-01-01"); final FEELFnResult<TemporalAccessor> p2 = timeFunction.invoke("23:59:01@Europe/Paris"); FunctionTestUtil.assertResult(p1, LocalDate.of(2017, 1, 1)); final TemporalAccessor p2TA = p2.getOrElse(null); assertNotNull(p2TA); assertEquals(LocalTime.of(23, 59, 1), p2TA.query(TemporalQueries.localTime())); assertEquals(ZoneId.of("Europe/Paris"), p2TA.query(TemporalQueries.zone())); final FEELFnResult<TemporalAccessor> result = dateTimeFunction.invoke(p1.getOrElse(null), p2.getOrElse(null)); FunctionTestUtil.assertResult(result, ZonedDateTime.of(2017, 1, 1, 23, 59, 1, 0, ZoneId.of("Europe/Paris"))); }
@Test public void parseWithZoneIANA() { final TemporalAccessor parsedResult = timeFunction.invoke("00:01:00@Europe/Paris").getOrElse(null); assertEquals(LocalTime.of(0, 1, 0), parsedResult.query(TemporalQueries.localTime())); assertEquals(ZoneId.of("Europe/Paris"), parsedResult.query(TemporalQueries.zone())); }
@Test public void parseWithZone() { final TemporalAccessor parsedResult = timeFunction.invoke("00:01:00@Etc/UTC").getOrElse(null); assertEquals(LocalTime.of(0, 1, 0), parsedResult.query(TemporalQueries.localTime())); assertEquals(ZoneId.of("Etc/UTC"), parsedResult.query(TemporalQueries.zone())); }
@Test public void testComposite5() { final FEELFnResult<TemporalAccessor> p1 = dateTimeFunction.invoke("2017-08-10T10:20:00@Europe/Paris"); FunctionTestUtil.assertResult(p1, ZonedDateTime.of(2017, 8, 10, 10, 20, 0, 0, ZoneId.of("Europe/Paris"))); final TemporalAccessor timeOnDateTime = timeFunction.invoke(p1.getOrElse(null)).getOrElse(null); assertNotNull(timeOnDateTime); assertEquals(LocalTime.of(10, 20, 0), timeOnDateTime.query(TemporalQueries.localTime())); assertEquals(ZoneId.of("Europe/Paris"), timeOnDateTime.query(TemporalQueries.zone())); FunctionTestUtil.assertResult(stringFunction.invoke(timeOnDateTime), "10:20:00@Europe/Paris"); } }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.chronology()) { return (R) getChronology(); } else if (query == TemporalQueries.precision()) { return (R) NANOS; } else if (query == TemporalQueries.localDate()) { return (R) LocalDate.ofEpochDay(toLocalDate().toEpochDay()); } else if (query == TemporalQueries.localTime()) { return (R) toLocalTime(); } else if (query == TemporalQueries.zone() || query == TemporalQueries.zoneId() || query == TemporalQueries.offset()) { return null; } return super.query(query); }
@SuppressWarnings("unchecked") @Override public <R> R query(TemporalQuery<R> query) { if (query == TemporalQueries.zoneId() || query == TemporalQueries.zone()) { return (R) getZone(); } else if (query == TemporalQueries.chronology()) { return (R) toLocalDate().getChronology(); } else if (query == TemporalQueries.precision()) { return (R) NANOS; } else if (query == TemporalQueries.offset()) { return (R) getOffset(); } else if (query == TemporalQueries.localDate()) { return (R) LocalDate.ofEpochDay(toLocalDate().toEpochDay()); } else if (query == TemporalQueries.localTime()) { return (R) toLocalTime(); } return super.query(query); }