问题标签 [offsetdatetime]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 如何从 MySQL Connector/J 直接检索 UTC OffsetDateTime
我更喜欢所有时间都在 UTC,除了它们显示的时候。在最后一刻,它们可以转换为本地时间,仅用于显示。
我以前总是在 MySQL 中存储 unix 时间戳(自纪元以来的秒数),在整数字段中。我正在使用其他人的数据库架构,我无法更改它使用DATETIME
存储原始时间甚至没有偏移量的数据库架构。
如何使用 UTC 格式的数据库检索和发送时间对象,因此数据库绝对不进行任何转换?
虽然是为 PostgreSQL 编写的,但我尝试遵循 Basil Bourque 在以下问题上的出色回答。我Instant
在任何地方都使用,除非他显示我OffsetDateTime
在与 JDBC 交互时使用 an,因为它是唯一保证受 JDBC 4.2 支持的现代 moment 类。
我正在使用 MySql Connector/J 8.0.27,并且正在使用&preserveInstants=false&connectionTimeZone=UTC
.
让我们看一下DATETIME
数据库中存储为“2022-01-14 11:00:00”的 a,它被理解为 UTC。
当它创建时OffsetDateTime
,它分配了“-04:00”的系统或服务器(同一台机器)偏移量并搞砸了一切。我认为我的连接选项&preserveInstants=false&connectionTimeZone=UTC
应该已经停止了。
我知道我可以立即将偏移量设置为“+00:00” .withOffsetSameLocal(ZoneOffset.UTC).toInstant()
,但是我如何避免这样做并让它直接创建一个OffsetDateTime
UTC 格式的?
java - 没有注释的自定义序列化
Springboot 上有没有一种方法可以在我的请求中为特定字段实现自定义序列化程序而无需进行注释?
如果我们可以创建一个 bean 或覆盖一个配置并序列化一个字符串输入(来自 json 请求),我更喜欢我的请求 pojo 上的 OffsetDateTime 字段。
我无法注释,因为我的请求类是自动生成的..
java - Spring Boot Mongodb - org.bson.Document 中的 OffsetDateTime 在 mongodb 中保存为“对象”
我想将包含 OffsetDateTime 实例的 org.bson.Document 保存到 mongodb,其中 OffsetDateTime 保存为 DATE。它当前保存为对象。
我正在使用我自己的自定义 MongoDatabaseFactory。
这是我的测试数据。我创建了一个 org.bson.Document。附加到 Document 这些类型:java.time.OffsetDateTime、java.time.Instant 和 java.util.Date。
通过 MongoTemplate 实例保存到 monogdb。Instant 和 Date 都在 mongo 中保存为 DATE。但是 OffsetDateTime 被保存为一个对象。我希望它保存为 DATE。
我搜索了谷歌,发现了许多问题/答案和网站声明使用 CustomConverters。
43544908/usage-of-offsetdatetime-with-spring-boot-and-mongodb-results-in-mappingexception
41127665/zoneddatetime-with-mongodb/
27091418/store-java-8-instant-as-bson-date-using-springdata-mongodb
我创建了两个转换器。OffsetDateTime -> 日期和日期 -> OffsetDateTime。使用@WritingConverter 和@ReadingConverter 进行注释。实例化 MongoCustomConversions,添加我的转换器,在 MappingMongoConverter 上设置转换,并传递给 MongoTemplate 的构造函数。
我已经尝试了许多排列设置 MongoTemplate 上的转换。没有工作。我已经在 eclipse 中调试了这个,但还没有找到转换文档的位置。
这是我在 mongodb 中看到的。mongodb 记录的快照 任何帮助表示赞赏。
java - 如何在 XMLGregorianCalendar 和 OffsetDateTime 中保留 +00:00 而不是 Z
我需要序列化(从 Java DTO 生成 Xml 字符串)并使用具有特定 date_time 模式的 XSD 持久化 DTO(Oracle DB),即 .*(+|-)((0[0-9])|(1 [0-3])):[0-5][0-9] 需要支持带偏移量的日期时间 (2022-02-12T12:49:14+05:45)。我正在使用 maven-jaxb 插件来生成 XML Java 对象和一些实用程序函数来转换 dateTime 内容。生成的类由 dateTime 对象的 XMLGregorianCalendar 组成,我使用 OffsetDateTime 来映射和持久化内容。
我无法更新模式,并且只有当 XML 日期元素包含像这样的日期 2022-02-12T12:49:14+00:00 (偏移量为零)时,XMLGregorianCalendar/OffsetDateTime 默认情况下都会转换偏移到 Z 即 2022-02-12T12:49:14Z 这对模式无效。
如何在序列化和持久化 DTO 时保持 +00:00 偏移量?我正在使用 Spring Data JPA 来持久化 DTO 以及在持久化有效的 OffsetDateTime 时遇到的另一个问题,因为 JPA 持久化了没有偏移的日期时间值。字符串类型解决了这个问题,但我不应该将字符串用于日期时间。存储这些值的正确类型是什么?
这是我的映射功能:
我试图覆盖 XMLGregorianCalendar.toXmlFormat() ,但日历对象仍然包含 Z 而不是 +00:00 并且由于模式而序列化失败。
hibernate - 日期字段上的修改标志不一致
我们最近向我们的 _AUD 表之一引入了 envers modifiedflags。我们有两列在 SQL Server 中定义为 datetime2,填充它们的 Java 类是 OffsetDateTime。在这两个上,modifiedflags 通常是不正确的,当没有变化时显示变化,反之亦然。在这两个字段上,时间无关紧要,因此代码将它们设置为相同的 UTC 时间。
我通过创建具有 yyyy-MM-dd 格式的数据的字符串版本的第二列并改用这些字段的修改标志来解决该问题。
虽然它有效,但我对我必须在代码中做的体操并不满意,我想把它做好。
有没有人遇到过日期字段和修改标志的问题,如果有,您是如何解决的?
谢谢