有没有一种方法可以使用Java的LocalDateTime类获取oracle数据库服务器的本地时间和时间?

问题描述

获取本机位置的当前时间并使用其值设置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类来实现此目的?如果无法使用此类,解决此问题的最佳方法是什么?

解决方法

我想使用系统当前时间的值 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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...