package com.logicbig.example.zoneddatetime;
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) {
ZonedDateTime d = ZonedDateTime.now();
System.out.println(d);
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);
LocalDate d2 = d.query(TemporalQueries.localDate());
System.out.println(d2);
Chronology c = d.query(TemporalQueries.chronology());
System.out.println(c);
}
}
Output
2017-05-01T16:00:42.080-05:00[America/Chicago]
16:00:42.080
-05:00
Nanos
America/Chicago
2017-05-01
ISO
A custom TemporalQuery example:
package com.logicbig.example.zoneddatetime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.TemporalAccessor;
import java.time.temporal.TemporalQuery;
public class QueryExample2 {
public static void main(String... args) {
ZonedDateTime d = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));
System.out.println(d);
Boolean b = d.query(ValidTimeQuery);
System.out.println("Is the given time zone in Asia? " + b);
}
public static final TemporalQuery<Boolean> ValidTimeQuery = new TemporalQuery<Boolean>() {
@Override
public Boolean queryFrom(TemporalAccessor temporal) {
//check if the underlying time zone is in Asia
ZoneId id = ZoneId.from(temporal);
String stringId = id.getId();
return stringId.startsWith("Asia");
}
};
}
Output
2017-05-02T06:00:44.526+09:00[Asia/Tokyo]
Is the given time zone in Asia? true