保存日期为

时间:2016-05-27 10:48:23

标签: java angularjs postgresql date

这个问题与this one具有相同的标题并非巧合。同样的问题,不同的环境。

我的基于Angular的应用程序向Tomcat服务器发送ISO格式和UTC时区的Angular UI Calendar Picker日期,这样如果我在May 1st 2016时区选择CEST它将会在JSON中是Apr 30 22:00 +2。 Postgres也将保存错误的价值! Mysql,SQL Server和Oracle不受此问题的影响(以下说明)

以下是往返旅程的逐步说明

  1. 用户选择11/04/1956格式
  2. 中的dd/MM/yyyy
  3. 客户端发送"birthDate" : "1956-04-10T22:00:00.000Z"
  4. 使用Jackson的Spring MVC会解码Tue Apr 10 23:00:00 CET 1956。请注意,4月30日应该是夏令时
  5. Hibernate会将该数据保存到java.util.Date标有@Temporal(DATE)
  6. 类型的列上的Postgres
  7. Postgres会将1956-04-10存储在该列
  8. Spring通过Ajax请求实体的JSON表示,并在正文中包含"birthDate" : "1956-04-10"
  9. 其他注意事项:

    • 我已经通过设置Tomcat时区来面对并解决了其他数据库中的问题。不是真正最智能的解决方案,因为强加-Duser.timezone需要与客户时区完全同步,这在国际环境中是不可能的,我们的 - 我的意思是我们很幸运客户来自同一地点,无论是伦敦罗马还是巴黎
    • 当日期字段删除时间时,问题确实发生 。我的意思是,如果我们将列存储为日期时间,只保留日期的跟踪,它将始终正确显示
    • 我已阅读this bug,但未提供任何有用的信息
    • 更糟糕的是,由于时间限制,我需要解决或解决这个问题。手动编辑不正确的DB条目

    无论如何,我对Postgres几乎没有经验。

    是否可以选择从JDBC或Hibernate属性强制Postgres时区? (解决方法)

    或者这类问题的正确解决方案是什么?

0 个答案:

没有答案