This example uses implementations of TemporalQuery to query OffsetDateTime object.
package com.logicbig.example.offsetdatetime;
import java.time.*;
import java.time.chrono.Chronology;
import java.time.temporal.TemporalQueries;
import java.time.temporal.TemporalUnit;
public class QueryExample {
public static void main(String... args) {
OffsetDateTime d = OffsetDateTime.of(2015, 11, 15, 18,
20, 30, 100, ZoneOffset.ofHours(-6));
Chronology c = d.query(TemporalQueries.chronology());
System.out.println(c);
LocalDate d2 = d.query(TemporalQueries.localDate());
System.out.println(d2);
LocalTime t = d.query(TemporalQueries.localTime());
System.out.println(t);
ZoneOffset z = d.query(TemporalQueries.offset());
System.out.println(z);
TemporalUnit p = d.query(TemporalQueries.precision());
System.out.println(p);
ZoneId z2 = d.query(TemporalQueries.zone());
System.out.println(z2);
ZoneId z3 = d.query(TemporalQueries.zoneId());
System.out.println(z3);
}
}
Output
ISO
2015-11-15
18:20:30.000000100
-06:00
Nanos
-06:00
null
A custom TemporalQuery example.
package com.logicbig.example.offsetdatetime;
import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalQuery;
public class QueryExample2 {
public static void main(String... args) {
OffsetDateTime d = OffsetDateTime.of(2015, 11, 15, 18,
20, 30, 100, ZoneOffset.ofHours(-5));
Boolean b = d.query(ValidTimeZoneQuery);
System.out.println(b);
}
public static final TemporalQuery<Boolean> ValidTimeZoneQuery = new TemporalQuery<Boolean>() {
@Override
public Boolean queryFrom(TemporalAccessor temporal) {
Instant instant = Instant.now();
ZoneId systemZone = ZoneId.systemDefault();
ZoneOffset z1 = systemZone.getRules().getOffset(instant);
ZoneOffset z2 = ZoneOffset.from(temporal);
return z1.equals(z2);
}
};
}
Output
true