在java8中, 格林威治时间、世界时、祖鲁时间、GMT、UTC、跨时区、夏令时分别需要用什么类表示呢
在Java 8中,日期和时间API提供了以下类来表示不同类型的时间:
// 获取当前的GMT时间
Instant instant = Instant.now();
System.out.println(instant); // 例如: 2023-04-05T07:59:22.592Z
// 获取当前的UTC时间
Instant utcInstant = Instant.now().atZone(ZoneId.of("UTC")).toInstant();
System.out.println(utcInstant); // 例如: 2023-04-05T07:59:22.592Z
// 获取当前的祖鲁时间
OffsetDateTime zuluDateTime = OffsetDateTime.now(ZoneOffset.UTC);
System.out.println(zuluDateTime); // 例如: 2023-04-05T07:59:22.592Z
// 获取当前的跨时区时间
ZonedDateTime zonedDateTime = ZonedDateTime.now();
System.out.println(zonedDateTime); // 例如: 2023-04-05T15:59:22.592+08:00[Asia/Shanghai]
// 创建一个表示本地日期和时间的对象
LocalDateTime localDateTime = LocalDateTime.of(2023, Month.APRIL, 5, 15, 0);
// 将本地日期和时间转换为指定时区的日期和时间
ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.of("America/New_York"));
// 判断指定时区当前是否处于夏令时
boolean isDST = zonedDateTime.toLocalDateTime().isDst();
System.out.println(isDST); // 例如: true
LocalTime
类来表示// 创建本地时间对象
LocalTime currentTime = LocalTime.now();
// 输出本地时间
System.out.println("当前时间为:" + currentTime);
// 指定时间创建本地时间对象
LocalTime customTime = LocalTime.of(14, 30, 0);
// 输出自定义的本地时间
System.out.println("自定义时间为:" + customTime);
它是根据Java中的标准时间来计算的,即从UTC时间1970年1月1日午夜(或者称为“Unix时间”或“Epoch时间”)开始的毫秒数,使用时区的偏移量将其转换为本地时间
在Java中,LocalTime表示的是本地时间,并不包含任何关于时区或时差的信息。如果需要将本地时间转换为其他时区的时间,则需要使用ZoneId类来指定目标时区。例如,以下代码将本地时间转换为纽约时区的时间:
LocalTime localTime = LocalTime.now();
ZoneId zoneId = ZoneId.of("America/New_York");
ZonedDateTime zonedDateTime = ZonedDateTime.of(LocalDateTime.now(), zoneId);
LocalTime newYorkTime = zonedDateTime.toLocalTime();
在上面的代码中,我们首先获取了当前的本地时间,然后使用ZoneId.of方法指定了目标时区为"America/New_York"。接着,使用ZonedDateTime.of方法将本地时间和目标时区组合成了一个带有时区信息的日期时间对象。最后,使用toLocalTime方法将其转换为本地时间。
LocalTime.now()
是Java中一个静态方法,用于获取当前本地时间。其原理是通过系统时钟来获取当前的本地时间。具体来说,系统时钟会获取当前操作系统的时间,并考虑了操作系统和硬件之间的时钟偏差,然后计算出当前的本地时间
如果你将系统时间设置到其他时区,LocalTime.now()
获取的时间也会受到影响,因为它获取的是系统时间,而不是某个特定时区的时间。如果你需要获取某个特定时区的本地时间,可以使用ZonedDateTime
类或OffsetDateTime
类。