问题描述
要获取本机位置的当前时间并使用其值设置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