0

要获取我机器位置的当前时间,并使用它的值来设置 jpql 查询的参数,此代码可以正常工作:

LocalDateTime now = LocalDateTime.now();
query.setParameter("myTime", Timestamp.valueOf(now)); //using the current machine time to set parameter for a jpql query

在另一个测试用例中,我想使用 oracle 数据库所在系统的当前时间值,而不是我本地机器的值。有没有办法使用同一个LocalDateTime类来获得这个?如果这门课不可能,解决这个问题的最佳方法是什么?

4

1 回答 1

0

我想使用oracle数据库所在系统的当前时间值,而不是我本地机器的值。有没有办法使用相同的 LocalDateTime 类来获得它?

ZonedDateTime#withZoneSameInstant

返回具有不同时区的此日期时间的副本,保留瞬间。

假设您的 Oracle DB 运行的系统的时区是America/New_York. 您可以LocalDateTime使用此方法找到该时区的时间。

演示:

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        // Zone ID of the system where Oracle DB runs
        ZoneId zoneId = ZoneId.of("America/New_York");

        System.out.println(getLocalDateTimeNowAtZoneId(zoneId));
    }

    static LocalDateTime getLocalDateTimeNowAtZoneId(ZoneId zoneId) {
        return ZonedDateTime.now().withZoneSameInstant(zoneId).toLocalDateTime();
    }
}

输出:

2020-08-17T18:37:04.456820
于 2020-08-17T22:39:07.187 回答