- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我的要求是在数据库中以 UTC 时区存储所有日期和日期时间。我正在使用 Java 8 LocalDate
& LocalDateTime
在我的 Hibernate 实体中。
是否正确为 LocalDate
& LocalDateTime
没有与它们关联的时区?
如果没有,我应该回退使用旧的(或遗留的?)Date
& Timestamp
?
或者我应该使用 Java 8 的 Instant
?如果使用 Instant
,是否有可能只存储日期部分而不存储时间?
数据库是 MySQL 和 SQL Server,这是一个 Spring Boot 应用程序。
最佳答案
“本地...”类型故意没有时区的概念。所以它们不代表时间线上的某个时刻。一个 LocalDateTime
表示可能时刻的模糊范围,但在分配偏移量或时区之前没有真正的意义。这意味着应用 ZoneId
获得 ZonedDateTime
.
例如,要说今年的圣诞节从 12 月 25 日的第一个时刻开始,我们说:
LocalDateTime ldt = LocalDateTime.of( 2017 , 12 , 25 , 0 , 0 , 0 , 0 );
LocalDateTime
在不同的时刻,每次交付都代表不同的
ZonedDateTime
目的。
LocalDateTime
并写入 TIMESTAMP WITHOUT TIME ZONE
类型的数据库列中. ZonedDateTime
并写入 TIMESTAMP WITH TIME ZONE
类型的数据库列中. Local…
的另一个原因类型用于 future 的约会。政治家喜欢经常改变他们管辖的时区。他们喜欢采用夏令时 (DST)。喜欢改变他们的 DST 转换日期。他们喜欢放弃采用 DST。他们喜欢重新定义他们的时区,改变界限。他们喜欢有时以 15 分钟之类的数量重新定义他们与 UTC 的偏移量。而且他们很少提前通知,只需一两个月的警告就做出这样的改变。
LocalTime
或
LocalDateTime
记录在
TIMESTAMP WITHOUT TIME ZONE
类型的数据库列中.否则,上午 9 点的约会,如果划在 DST 转换被推迟的地方,可能会显示为上午 8 点或上午 10 点。
ZoneId
) 应用于那些“本地”(未分区)值以创建
ZonedDateTime
对象。但是,当政治家可能通过改变区域来破坏他们的意义时,不要依赖那些太远的时间。
Instant
class 代表时间线中的一个时刻。在 UTC 中,分辨率为纳秒。
Instant instant = Instant.now() ; // Current moment on the timeline in UTC.
ZonedDateTime zdt = instant.atZone( z ) ; // Assign a time zone to view the same moment through the lens of a particular region’s wall-clock time.
Instant instant = zdt.toInstant(); // revert back to UTC, stripping away the time zone. But still the same moment in the timeline.
PreparedStatement::setObject
ResultSet::getObject
Instant
&
ZonedDateTime
.该规范确实需要支持
OffsetDateTime
.因此,您可以轻松地来回转换。
java.util.Date
和
java.sql.Timestamp
只要有可能。它们设计不佳、令人困惑且有缺陷。
java.time.Instant
java.time.OffsetDateTime
分配的偏移量为 ZoneOffset.UTC
java.util.Date
java.sql.Timestamp
java.time.LocalDate
.本类(class)取代
java.sql.Date
.
关于java - 在数据库中使用 Java 8 LocalDate 和 LocalDateTime 进行 hibernate ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43476364/
我正在尝试计算 2 个 localDates 之间的天数 我从这个答案中获得灵感:https://stackoverflow.com/a/325964对于这个问题Determine Whether T
我在使用 Joda daysBetween 函数时遇到问题。它一直在告诉我 The method daysBetween(ReadableInstant, ReadableInstant) in th
初始问题: 在Scala中,我想使用隐式 Ordering[T]#Ops比较两个LocalDate . 它只是使用像 > 这样的“运算符”而不是isAfter . 它应该只是一个导入:import s
如何删除 localDate 中的 T? 我需要删除“T”以匹配数据库中的数据。 这是我的代码 DateTimeFormatter formatter = DateTimeFormatter.ofPa
这个问题已经有答案了: How to format LocalDate object to MM/dd/yyyy and have format persist (4 个回答) How can you
这个问题在这里已经有了答案: What is the difference between public, protected, package-private and private in Jav
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题已经有答案了: SimpleDateFormat ignoring month when parsing (4 个回答) Java date format conversion - getti
这个问题在这里已经有了答案: Localdate.format, format is not applied (2 个答案) How to format LocalDate to string? (
这个问题在这里已经有了答案: Importing two classes with same name. How to handle? (11 个回答) 7年前关闭。 我正在练习如何处理日期。但是当我
根据 Joda 中的文档: public LocalDate(int year, int monthOfYear, int dayOfMonth, Chronology chron
我正在尝试开发一个独立于 GWT 的通用模块,直到它实际在 GWT 应用程序中使用为止。问题是 GWT 不支持 joda 并且我的模块不使用 GWT。 我想要实现的目标(这行不通): 最
问题:Spring 似乎对 LocalDate 使用不同的反序列化方法,具体取决于它是出现在 @RequestBody 还是请求 @ReqestParam -这是正确的吗?如果是这样,是否有办法将它们
我想使用 Java8 DateTime API 中的 LocalDate 和 LocalDateTime,并且在值为 null 时无法坚持到 postgresql date 和 timestamp。
我正在做以下编程练习:Unlucky Days 。声明如下: Friday 13th or Black Friday is considered as unlucky day. Calculate h
这个问题已经有答案了: Java 8 LocalDateTime is parsing invalid datetime (5 个回答) How to sanity check a date in J
我有一个包含以下字段的员工类。 class Employee { final int id; final String name; final LocalDate update
这个问题已经有答案了: If statement gives condition is always true (4 个回答) 已关闭 3 年前。 我试图将两个日期与日期列表进行比较(列表元素已被删除
被这个问题困扰了一段时间,希望得到一些意见。我想验证用户输入的日期,以便我可以使用 LocalDate 对象执行计算。但是,当输入有效日期时,返回的日期是前一个无效日期,这会引发异常并崩溃。我错过了什
这个问题已经有答案了: How can I parse/format dates with LocalDateTime? (Java 8) (11 个回答) 已关闭 3 年前。 我有一个日期时间信息字
我是一名优秀的程序员,十分优秀!