jOOQ 将偏移日期时间返回为 Z (UTC),即使它不是

2023-12-04

我有一个简单的 Postgres 测试表,其中包含 id、时间戳和时区。下面的测试和输出应该是不言自明的,但总而言之,我插入了一行,其时间戳的偏移量为 -6。它被正确插入到数据库中,然后以相同的时间从数据库中加载出来,但是偏移量错误,特别是 Z 而不是 -6。

我尝试将数据库设置为 UTC,当我在命令行中手动选择时,它会正确显示 UTC 时间。将数据库设置为 mountain,它显示预期时间,偏移量为-6。

通过在 jOOQ 中执行的语句强制数据库到不同的时区似乎没有任何作用。

context.execute( "set timezone TO 'GMT';" ); // this has no effect

强制我的系统时间为 UTC 可以有效解决该问题,但由于多种原因是不可接受的。

TimeZone.setDefault( TimeZone.getTimeZone( "UTC" ) ); // this is a band aid that works, but is not sustainable

这是单元测试:

@Test
public void confirmDateRoundTripFromDb() throws SQLException, DatatypeConfigurationException
{
    ZonedDateTime testDate = ZonedDateTime.of( 2019, 05, 30, 12, 54, 32, 203, TimeUtilities.CENTRAL_ZONEID );

    final OffsetDateTime testDateAsOffset = testDate.toOffsetDateTime( );

    try( PGConnection dbConnection = DatabaseUtility.getPostgresConnection( _unitTestConfig.getSection("Postgres").getProperties(), _testDbName ) )
    {
        DSLContext context = DSL.using( dbConnection, SQLDialect.POSTGRES );
        DateTestsRecord dateTestsRecord = context.newRecord( DATE_TESTS );
        dateTestsRecord.setTestTimestamp( testDateAsOffset );
        dateTestsRecord.store();

        int id = dateTestsRecord.getId();

        DateTestsRecord insertedRecord = context.selectFrom( DATE_TESTS ).where( DATE_TESTS.ID.eq( id ) ).fetchAny();
        System.out.println( testDateAsOffset );
        System.out.println( insertedRecord.getTestTimestamp() );
    }
}

和输出:

2019-05-30T12:54:32.000000203-05:00
2019-05-30T11:54:32Z

有趣的是,如果我在中部添加日期,小时会正确更改为山区,但往返后的输出仍然只是愉快地报告 Z。

我认为这不是预期的?难道我做错了什么?如果没有,有什么可以在全球范围内应用的解决方法的想法吗?有几个开发人员对此感兴趣,我对每次选择时都必须使用一些特殊逻辑处理日期感到不兴奋,这似乎很脆弱。

我一直在运行 3.10,但刚刚升级到 3.12,结果相同。


这不是 jOOQ 问题。 PostgreSQL 没有对应的数据类型ZonedDateTime. Its TIMESTAMPTZ or TIMESTAMP WITH TIME ZONE类型实际上只是一个java.time.Instant。考虑一下手册:https://www.postgresql.org/docs/current/datatype-datetime.html

对于带时区的时间戳,内部存储的值始终采用 UTC(通用协调时间,传统上称为格林威治标准时间,GMT)。指定了显式时区的输入值将使用该时区的适当偏移量转换为 UTC。如果输入字符串中未指定时区,则假定其处于系统 TimeZone 参数指示的时区,并使用时区的偏移量将其转换为 UTC。

jOOQ 无法为您做任何事。

请注意,jOOQ 默认为映射TIMESTAMP WITH TIME ZONE在所有 SQL 数据库中键入java.time.OffsetDateTime,因为这就是 JDBC 规范的作用。对于像 JDBC(和 jOOQ)这样的供应商无关的 API,这是一个合理的默认值。但如果你想拥有 PostgreSQL 原生的行为,我建议重写你的所有TIMESTAMPTZ类型为INSTANT(如果您使用的是 jOOQ 3.12+)。

如果由于某种原因,您需要维护此信息,则需要将其存储在单独的列中,或者存储在text列作为格式化值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jOOQ 将偏移日期时间返回为 Z (UTC),即使它不是 的相关文章

  • 按键时关闭 ModalWindow

    我希望能够在用户按下某个键 在我的例子中是 ESC 时关闭 ModalWindow 我有一个用于按键的 Javascript 侦听器 它调用取消按钮 ID 的单击事件 jQuery modalWindowInfo closeButtonId
  • 如何将本机库链接到 IntelliJ 中的 jar?

    我正在尝试在 IntelliJ 中设置 OpenCV 但是我一直在弄清楚如何告诉 IntelliJ 在哪里可以找到本机库位置 在 Eclipse 中 添加 jar 后 您可以在 Build Config 屏幕中设置 Native 库的位置
  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 在内存中使用 byte[] 创建 zip 文件。 Zip 文件总是损坏

    我创建的 zip 文件有问题 我正在使用 Java 7 我尝试从字节数组创建一个 zip 文件 其中包含两个或多个 Excel 文件 应用程序始终完成 没有任何异常 所以 我以为一切都好 当我尝试打开 zip 文件后 Windows 7 出
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • 动态选择端口号?

    在 Java 中 我需要获取端口号以在同一程序的多个实例之间进行通信 现在 我可以简单地选择一些固定的数字并使用它 但我想知道是否有一种方法可以动态选择端口号 这样我就不必打扰我的用户设置端口号 这是我的一个想法 其工作原理如下 有一个固定
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • Java 公历日历更改时区

    我正在尝试设置 HOUR OF DAY 字段并更改 GregorianCalendar 日期对象的时区 GregorianCalendar date new GregorianCalendar TimeZone getTimeZone GM
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • volatile、final 和synchronized 安全发布的区别

    给定一个带有变量 x 的 A 类 变量 x 在类构造函数中设置 A x 77 我们想将 x 发布到其他线程 考虑以下 3 种变量 x 线程安全 发布的情况 1 x is final 2 x is volatile 3 x 设定为同步块 sy
  • 如何访问JAR文件中的Maven资源? [复制]

    这个问题在这里已经有答案了 我有一个使用 Maven 构建的 Java 应用程序 我有一个资源文件夹com pkg resources 我需要从中访问文件 例如directory txt 我一直在查看各种教程和其他答案 但似乎没有一个对我有
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 获取文件的总大小(以字节为单位)[重复]

    这个问题在这里已经有答案了 可能的重复 java 高效获取文件大小 https stackoverflow com questions 116574 java get file size efficiently 我有一个名为 filenam
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • 如何使用 jUnit 将测试用例添加到套件中?

    我有 2 个测试类 都扩展了TestCase 每个类都包含一堆针对我的程序运行的单独测试 如何将这两个类 以及它们拥有的所有测试 作为同一套件的一部分执行 我正在使用 jUnit 4 8 在 jUnit4 中你有这样的东西 RunWith
  • 找不到符号 NOTIFICATION_SERVICE?

    package com test app import android app Notification import android app NotificationManager import android app PendingIn
  • CamcorderProfile.videoCodec 返回错误值

    根据docs https developer android com reference android media CamcorderProfile html 您可以使用CamcorderProfile获取设备默认视频编解码格式 然后将其

随机推荐

  • IE 9 的 onhashchange

    我有以下代码 document ready function if onhashchange in window alert The browser supports the hashchange event function test a
  • 将 WPF TextBlock 绑定到文本文件

    如何将 WPF TextBlock 绑定到文本文件 我想让 TextBlock 显示文件的内容 您需要将文件读入内存中的字符串并绑定到该字符串 查看型号 class ViewModel public string FileText get
  • 为什么正则表达式捕获组索引为 1?

    我的一部分担心这个问题会被结束 但我确实对某些事情感到困惑 在我使用的每种语言的正则表达式中 捕获组的索引为 1 即使该语言的其余部分索引为 0 我想到了会导致 1 索引的设计决策 这通常是为了降低非技术人员的进入门槛 但是当涉及到正则表达
  • x86、x32 和 x64 架构之间的区别?

    请解释一下两者的区别x86 x32 and x64 说到这里有点令人困惑x86 and x32因为大多数时候 32 位程序在 x86 上运行 Hans 和 DarkDust 的回答涵盖了 i386 i686 和 amd64 x86 64 因
  • 如何获取div之外的文本?

    div class amlocator store information div class amlocator title The Better Health Store div 2420 E Stadium Ann Arbor MI
  • 不同线程中的 HttpContext.Current.Items

    使用 HttpContext Current Items 我们可以访问当前请求中的变量 我的问题是 如果请求移动到不同的线程 我们仍然可以访问它吗 如果是 我们如何访问它 我认为它会抛出空引用异常 我正在尝试使用下面的代码 但它抛出空引用异
  • DataGridView - 如何使复选框充当单选按钮?

    我有一个 Windows 窗体应用程序 它显示一个对象列表数据网格视图 该控件将布尔值呈现为复选框 对象属性中有一组互斥的三个复选框 至多其中一项可能是正确的 因此 我希望复选框就像一组单选按钮一样 老家伙的一句旁白 我认为现在的人们甚至不
  • 自定义 UILocalNotification 重复间隔

    有没有办法指定 UILocalNotification 应该在哪几天触发 我希望能够设置不同的日期 比如说 仅在周一 周二和周日触发本地通知 有没有办法做到这一点 非常感谢 更新 也许我可以为每一天设置多个本地通知 并给每个通知一个 NSW
  • 如何从清单类路径条目中获取 jar

    我有一个可运行的 jar 其清单文件的类路径条目中有两个 jar Class Path module1 0 0 1 SNAPSHOT jar base 0 0 1 SNAPSHOT jar Main Class test MySPI 程序运
  • ggplot2 color - 当指定“红色”时显示不同的颜色

    我试图了解 ggplot2 如何处理颜色的美学 下面显示的两个 ggplot 命令显示不同的颜色 第二个命令显示较浅的颜色 并另外打印图例 如果有人能阐明这个概念 我将不胜感激 data iris 1st command ggplot ir
  • 如何从函数返回新数据作为参考,而不会出现借用检查器问题?

    我正在编写一个函数 它接受一个整数的引用并返回该整数乘以 2 5 倍的向量 我认为这看起来像 fn foo x i64 gt Vec lt i64 gt let mut v vec for i in 0 5 let q x 2 v push
  • MATLAB中生成一定范围内的随机数

    如何在 MATLAB 中生成 13 到 20 之间的随机数 如果您正在寻找均匀分布的伪随机整数 请使用 randi 13 20
  • 为什么我的 React propTypes Jest 测试在使用多个不可接受的 prop 值时会中断?

    In 另一个SO问题的答案关于如何测试propTypes在 React using Jest 中 我提出了一个模拟的解决方案console error 其他人以前做过但我认为可以改进的事情 我的解决方案 一个函数 如下 下面的示例代码包含一
  • 如何在 Django 中使用 css 和 javascript 的静态文件夹?

    我是 django 框架的新手 我创建了简单的欢迎页面 现在我想在我的项目中包含 css 文件 我无法在项目中应用 css 文件 我收到类似 NetworkError 404 NOT 的错误 找到 static css hai css th
  • 更改内部 Android 模拟器的时间

    我正在创建一个 Android 应用程序 该应用程序广泛使用 Android 中的时间和日期功能 包括 AlarmManager 的许多用途 但对于测试来说 仅仅为了测试某些功能而更改 Windows 系统时钟是一件很痛苦的事情 有没有办法
  • 如何创建使用子查询的联接?

    如何将以下 SQL 查询转换为 CakePhp 查找查询 SELECT a id a rev a contents FROM YourTable a INNER JOIN SELECT id MAX rev rev FROM YourTab
  • dllspec(dllimport) 和 dllspec(dllexport) 是什么意思

    经过谷歌搜索 我了解到 Dllimport 使该功能可用于其他模块 是否必须使用 extern c 标识符声明函数 另外 Dllexport 的意思是 Dll 本身在编译时使用该函数 所以默认情况下所有 DLL 中存在的函数是 dllexp
  • 在 Docker 环境中运行 Symfony 时的文件夹权限

    我正在 OSX 上运行 Docker 容器 容器包括 Symfony Nginx php fpm Redis 这是运行 Symfony 应用程序的非常常见的设置 我遇到了一些奇怪的文件夹权限问题 并且收到此错误 错误截图 我的 Symfon
  • 如何获取脚本标签的innerHTML

    好吧 我已经搜索了一小时了 如何获取脚本标签的innerHTML 这就是我一直在做的事情 我一直在尝试寻找一种使用脚本标记调用另一个域的页面源的方法 我见过一个有效的例子 但我一生都找不到它 你不能那样做 没有innerHTML 您所能做的
  • jOOQ 将偏移日期时间返回为 Z (UTC),即使它不是

    我有一个简单的 Postgres 测试表 其中包含 id 时间戳和时区 下面的测试和输出应该是不言自明的 但总而言之 我插入了一行 其时间戳的偏移量为 6 它被正确插入到数据库中 然后以相同的时间从数据库中加载出来 但是偏移量错误 特别是