Spring Boot数据休息中的日期问题

2024-07-01

当我处理日期时,我遇到了春季数据休息的问题。简而言之,就是推迟一天的日期。例如,如果我有 1111-11-11,它会返回给我 1111-11-10。

SO 中有一些相关的帖子(ex1 https://stackoverflow.com/questions/31822877/jackson-jsonformat-set-date-with-one-day-less, ex2 https://stackoverflow.com/questions/31822877/jackson-jsonformat-set-date-with-one-day-less/45456037#45456037, ),但都没有解决问题。

我有一个实体LocalDate:

@Column(nullable=true)
private LocalDate birthDate;

我也有这个存储库:

@RepositoryRestResource(collectionResourceRel = "person", path = "person")
public interface PersonRepository extends PagingAndSortingRepository<Person, Long>{

}

当我保存birthDate在数据库中(我使用MySQL),它保存正确。但是,当我进行此查询时,例如:

Person p = personRepo.findById(1L).get();

日期的获取晚了一天(就像上面的示例一样)。 我尝试实施这个建议 https://stackoverflow.com/questions/31822877/jackson-jsonformat-set-date-with-one-day-less,即把LocalDate改为Date并包含Jackson注解,但是不起作用。我还尝试包括jackson-modules-java8,但问题依然存在。

现在最有趣的事情。当我刚刚测试时,我添加了日期 1111-11-11。我将其更改为今天的日期 2019-02-06。然后,抓取工作就成功了!这时我想是否是很旧的日期的问题。因此,我尝试了,例如1970-01-01,春天回来了1969-12-31。我意识到,如果我在数据库中包含 1986 年 1 月 1 日以上的日期,一切都会正常。但是,如果我包含以下任何内容,我就会晚一天得到日期。

有人对这个问题有一些提示吗?

感谢您的时间!

EDIT:我还检查了我的数据库时区,没问题!

+--------------------+---------------------+--------------------+
| @@GLOBAL.time_zone | @@session.time_zone | @@system_time_zone |
+--------------------+---------------------+--------------------+
| SYSTEM             | SYSTEM              | -02                |
+--------------------+---------------------+--------------------+
1 row in set (0,00 sec)

最后,我找到了解决方案。在@ILyaCyclone 和@OleV.V 之后。评论,我开始搜索时区、Spring Boot 和LocalDate。确实是LocalDate不携带UTC信息。然而,当我从数据库中获取这些数据时,JVM 需要进行转换以使 SQLdate成为LocalDate.

因此,我做的第一件事就是检查数据库时区:

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP) as GMT_TIME_DIFF;

返回:

+--------------------+---------------------+--------------------+
| @@GLOBAL.time_zone | @@session.time_zone | @@system_time_zone |
+--------------------+---------------------+--------------------+
| SYSTEM             | SYSTEM              | -02                |
+--------------------+---------------------+--------------------+

and:

SELECT TIMEDIFF(NOW(), UTC_TIMESTAMP)

返回:

+--------------------------------+
| TIMEDIFF(NOW(), UTC_TIMESTAMP) |
+--------------------------------+
| -02:00:00                      |
+--------------------------------+

所有这些 SQL 答案都可以。所以,问题出在 Spring Boot 上。解决这个问题的方法是在代码中设置UTC。我发现了这个提示here https://stackoverflow.com/questions/46151633/how-to-make-default-time-zone-apply-in-spring-boot-jackson-date-serialization.

@PostConstruct
void started() {
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
}

之后,所有日期都开始正常工作。

问题就解决了。但是,我对 1986 年前后的日期问题一无所知。如果有人有任何提示,请与我分享。

感谢你们付出了一些努力来帮助我。我真的很感激。

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

Spring Boot数据休息中的日期问题 的相关文章

  • 即使凭据正确,Spring-security 也不会登录用户

    谁能指出我的错误 我一开始无法使用注册用户登录 我以为是因为我正在加密密码 但即使现在我已经删除了编码 即使使用明文密码 用户仍然无法登录 这是我的 web xml
  • 如何在 JPA/Hibernate 中找出实体是否分离?

    有没有办法查询JPA实体管理器给定实体是否分离 这个帖子 https stackoverflow com questions 2779857 how to know if a detached jpa entity has already
  • Spring Boot数据休息中的日期问题

    当我处理日期时 我遇到了春季数据休息的问题 简而言之 就是推迟一天的日期 例如 如果我有 1111 11 11 它会返回给我 1111 11 10 SO 中有一些相关的帖子 ex1 https stackoverflow com quest
  • 使用 Jackson 反序列化非字符串映射键

    我有一张如下所示的地图 public class VerbResult JsonProperty similarVerbs private Map
  • 您使用什么来进行复杂的构建过程? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在尝试改进我们的构建过程 目前它是一个巨大的 Ant build xml 它调用其他 ant 构建
  • 什么是运行时绑定?

    根据 Android 开发者指南 Intent 是一个提供运行时绑定独立组件之间 例如两个活动 什么是 运行时绑定 继承创建类型兼容性 它允许超类引用 引用子类的对象 反过来则不然 超类引用 指的是 子类的对象 只能用于 访问继承的和重写的
  • 关于final关键字的java基础知识

    方法中可以使用final关键字吗 绝对地 这final关键字几乎可以应用于任何事物 在每种情况下都意味着 您无法再更改它 这就是它应用于时的含义 一个变量 您根本无法为变量分配新值 将其呈现为constant 当然 a method 您不能
  • 如何处理请求上传期间客户端中止?

    给定以下应用程序 基于春季初始化 https start spring io模板 SpringBootApplication public class DemoApplication public static void main Stri
  • Java:检查数组的相等性(顺序无关紧要)

    我有两个String数组 比方说 String s1 a b c String s2 c a b 这些数组应该相等 我想以 最干净 的方式检查它们的相等性 我尝试使用Arrays equals s1 s2 但我得到了一个错误的答案 我想这个
  • 在内存对象缓存中开发

    我正在开发一个基于网络的医疗应用程序 需要创建一个小型内存对象缓存 这是我的用例 我们需要显示需要某些东西 血液 肾脏等 的人提交的请求列表 并且它不会是一个巨大的列表 因为在某一天对血液或其他任何东西的请求将是有限的 请注意 我们不想使用
  • 如何使用 Spring 使用注释执行基于构造函数的依赖注入?

    好的 如果我需要在构造函数中放入一些原始值 我该怎么做 Autowired public CustomBean String name Qualifier SuperBean SuperBean superBean super this s
  • docx4j用html替换变量

    我得到了这个示例代码 用文本替换变量 它工作得很好 WordprocessingMLPackage wordMLPackage WordprocessingMLPackage load new java io File c template
  • 如何修复 NoClassDefFoundError: CircularOutputStream 错误?

    我只是为 Selenium WebDriver 又名 Selenium 2 自动化测试创建一个简单的 Maven 项目 以进行无头测试 我在 pom xml 中添加了 PhantomJS 驱动程序依赖项和其他依赖项 如下所示
  • 如何为 CompletableFuture::supplyAsync 选择执行器

    CompletableFuture supplyAsync gt IO bound queries 如何为 CompletableFuture supplyAsync 选择执行器以避免污染ForkJoinPool commonPool 里面
  • 在 Java 8 中使用 Lambda 将流收集到 HashMap 中

    我有一个 HashMap 我需要使用一些函数来过滤它 HashMap
  • 在 JSP 中呈现 JSON 数据的最佳实践是什么?

    我需要在 JSP 中针对某些 AJAX 请求呈现 JSON 数据 我想知道在易用性和稳定性方面最好的方法是什么 假设您想要从一个或多个 Java 对象生成 JSON 以下是一种相当简单的方法 将 Java 对象设置为请求 会话范围内的属性
  • Android - 循环 strings.xml 文件

    我想知道是否有办法循环strings xml file 假设我有以下格式
  • 消息应用程序的 ListView 滚动后显示错误的 listItem 布局

    我知道stackoverflow上已经发布了很多类似的问题 所以请不要以为我没有高低搜索过 我认为我的问题只是来自于现在完全理解 listViews 和列表项的生命周期 我有一个列表视图 可以包含两种类型的消息 出站或入站 最初 我的 li
  • Java将浮点字符串解析为浮点数组?

    有没有一种简单的方法将浮点字符串解析为浮点数组 我正在编写一个导入程序 它需要解析一个 ascii 文件以获取一些值 我只是想知道是否有更简单的方法来执行此操作 然后自己搜索所有空白并使用Float parseFloat s 对于每个空格分
  • 计算时间复杂度和 Big-O 表示法 [重复]

    这个问题在这里已经有答案了 我的以下代码的 Big O 表示法的时间复杂度是多少 计算它的步骤是什么 import java io File import java io FileNotFoundException import java

随机推荐