将 Joda LocalDateTime 存储在 PostgreSQL 'timestamp' 列中的 DST 问题
问题:将 Joda LocalDateTime 存储在 PostgreSQL 'timestamp' 列中的 DST 问题 在我们的应用程序中,我们存储了属于许多不同时区的日期时间。我们决定使用 JodaLocalDateTime类型 - 这样用户总是能从字面上得到他们首先输入的任何内容。这正是我们所需要的。 在内部,我们知道用户属于哪个时区 - 所以当他们输入日期时间时,我们会进行如下检查: d
问题:将 Joda LocalDateTime 存储在 PostgreSQL 'timestamp' 列中的 DST 问题
在我们的应用程序中,我们存储了属于许多不同时区的日期时间。我们决定使用 JodaLocalDateTime
类型 - 这样用户总是能从字面上得到他们首先输入的任何内容。这正是我们所需要的。
在内部,我们知道用户属于哪个时区 - 所以当他们输入日期时间时,我们会进行如下检查:
dateTimeZone.isLocalDateTimeGap(localDateTime)
如果该日期时间在他们的时区中不存在(它在夏令时间隙中),我们会显示日期不正确的错误消息,从而防止不正确的日期时间存储在数据库中。
对于存储,我们使用 timestamp 列。当用户输入的日期时间存在于他们的时区但不存在于数据库时区(欧洲/柏林)中时,问题就开始了。例如。当我从欧洲/伦敦时区存储 LocalDateTime 2015-03-29 02:30:00 时(这是有效的 - 在伦敦,差距在 01:00 和 02:00 之间),PostgreSQL 将小时移动 1并将其保存为**2015-03-29 03:30:00**。
该怎么办?有没有办法告诉 PostgreSQL 不对时区做任何事情,而只是按照 Joda 的代表来存储日期时间? (除了将它们存储为字符串;))
解答
在 PostgreSQL 7.3 及更高版本中,timestamp
等价于timestamp without time zone
。该数据类型不支持时区。它仅存储日期和时间。如果您发现它发生了变化,那么它可能与您用于存储或检索数据的代码或工具有关。
请注意,在 7.3 版本之前,timestamp
等价于timestamp with timezone
。这在此处的文档](http://www.postgresql.org/docs/9.3/static/datatype-datetime.html)的第一个注释框[中提到。
更多推荐
所有评论(0)