元表-oracle 12c-utc时区中的条目

4xrmg8kj  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(423)

我们将oracle12cdb用于spring批处理应用程序。系统时区为pst。但是我需要utc时区的元表中与作业和步骤相关的条目。有什么建议吗?

p4tfgftt

p4tfgftt1#

按照最佳实践,将时间预设为 UTC 被认为是最佳实践,为了避免将来springbootjpa出现错误,请在应用程序中使用以下代码。属性文件,显然您可以根据自己的选择修改时区:

  1. spring.jpa.properties.hibernate.jdbc.time_zone = UTC

也可以直接附加为:

  1. spring.datasource.url=jdbc:oracle:thin://localhost:3306/linkedin?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false

但要解决这个问题,你有两个选择:
1- JPA Native Query 选择和投射对象数组,例如:
您可以使用oracle功能将pst转换为utc

  1. select cast(coltime as timestamp) at time zone 'UTC' from ...

jpa存储库:

  1. public interface EmployeeRepository extends JpaRepository<Employee, Long> {
  2. @Query(value = "select cast(DD.Ch_Status_Validfrom as timestamp) at time zone 'UTC', za.first_name, za.birth_date, ts.salary\n" +
  3. "from employees za, salaries ts \n" +
  4. "where za.emp_no= :id" +
  5. " LIMIT 10 OFFSET 20"
  6. ,nativeQuery = true)
  7. List<Object[]> findWithSalary(@Param("id")Integer id);
  8. }

命令行运行程序

  1. @Component
  2. public class LoaderBootStrap implements CommandLineRunner {
  3. private final EmployeeRepository employeeRepository;
  4. @Override
  5. public void run(String... args) throws Exception {
  6. List<Object[]> withSalary = employeeRepository.findWithSalary(10001);
  7. }
  8. }

2-使用java在时区之间转换日期和时间,例如(utc+8:00)亚洲/新加坡-新加坡时间到(utc-5:00)美洲/纽约-东部标准时间:

  1. private final void demo(){
  2. ZoneId assiaZone = ZoneId.of("Asia/Singapore");
  3. ZoneId americaZone = ZoneId.of("America/New_York");
  4. ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
  5. System.out.println("Current Time As UTC : " + zonedDateTime);
  6. System.out.println("Current time As America time : " + dateConvertWithZoneId(zonedDateTime, americaZone));
  7. System.out.println("Current time As Asia time : " + dateConvertWithZoneId(zonedDateTime, assiaZone));
  8. }
  9. private final LocalDateTime dateConvertWithZoneId(ZonedDateTime actualDate, ZoneId withZone){
  10. ZonedDateTime date = actualDate;
  11. return date.withZoneSameInstant(withZone).toLocalDateTime();
  12. }
展开查看全部

相关问题