出于测试目的,我想创建一个带有时区的固定Clock:

Clock c= Clock.fixed(Instant.parse("2018-04-29T10:15:30.00Z"), ZoneId.of("Europe/Berlin"));
//yields FixedClock[2018-04-29T10:15:30Z,Europe/Berlin]

现在我想用Clock个机智的LocalDateTime:

LocalDateTime.now(c);
//yields 2018-04-29T12:15:30

为什么我会得到两个小时的补偿?在什么地方有UTC转换吗?我必须做些什么才能生成一个固定的Clock个时区和LocalDate.now(c)个yield 率相同的时间?

推荐答案

2018-04-29T10:15:30.00Z对应2018-04-29T12:15:30+02:00,OffsetDateTimeLocalDateTime为2018-04-29T12:15:30;您的LocalDateTime.now(c)也是.

Demo:个个

import java.time.*;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.parse("2018-04-29T10:15:30.00Z");
        ZoneId zoneId = ZoneId.of("Europe/Berlin");
        Clock c= Clock.fixed(instant, zoneId);

        // 2018-04-29T10:15:30.00Z corresponds to 2018-04-29T12:15:30+02:00
        OffsetDateTime odt = instant.atZone(zoneId).toOffsetDateTime();
        System.out.println(odt);

        // LocalDateTime from this OffsetDateTime results in 2018-04-29T12:15:30
        System.out.println(odt.toLocalDateTime());

        // So does LocalDateTime.now(c)
        System.out.println(LocalDateTime.now(c));
    }
}

Output:个个

2018-04-29T12:15:30+02:00
2018-04-29T12:15:30
2018-04-29T12:15:30

如何获得您想要的输出?

您需要使用UTC偏移量来获得与给定Instant具有相同值的LocalDateTime.

Demo:个个

import java.time.*;

public class Main {
    public static void main(String[] args) {
        Clock c = Clock.fixed(Instant.parse("2018-04-29T10:15:30.00Z"), ZoneId.of("Europe/Berlin"));
        LocalDateTime ldt = Instant.now(c).atZone(ZoneOffset.UTC).toLocalDateTime();
        System.out.println(ldt);
    }
}

Output:个个

2018-04-29T10:15:30

Online Demo

100了解现代Date-Time API.

Java相关问答推荐

为什么我们仍然需要实现noArgsConstructor如果Java默认提供一个非参数化的构造函数?''

在for—each循环中的AnimationTimer中的if语句'

JUnit—如何模拟局部变量对象方法调用

Junit with Mockito for java

Java inline Double条件和值解装箱崩溃

使用动态ID从json获取详细信息的Jolt规范

使用意向过滤器从另一个应用程序启动服务

Java LocalTime.parse在本地PC上的Spring Boot中工作,但在Docker容器中不工作

无法使用ApacheSpark依赖项构建JavaFX应用程序

带错误BER验证的itext8签名返回pdf

Java中将文本拆分为数字或十进制数字和字符串

迁移到Java 17后,日期显示不准确

为什么在下面的Java泛型方法中没有类型限制?

如何使用MapStrCut转换双向链接

如何在ImageIO或十二只猴子中旋转TIFF CMYK图像?

Java 21中泛型的不兼容更改

如何使用外部函数从Java中获取C++ struct 的返回值&;内存API

JOOQ:批处理CRUD操作使用动态表定义,如何?

如何用Micrometer&;斯普肯

如何在Java上为循环数组从synchronized迁移到ReentrantLock