最近,使用JPA处理Timestamps时,我经历了很多痛苦。我发现,通过对字段使用TIMESTAMPTZ而不是TIMESTAMP可以解决许多问题。我的服务器在UTC中,而我的JVM在PST中。使用TIMESTAMP WITHOUT TIMEZONE时,使用JPA几乎不可能对数据库中的UTC值进行规范化。
对于我来说,我将这些字段用于诸如“用户何时创建”,“他们上次使用设备的时间”,“何时上次收到警报的时间”等内容。这些通常是事件,因此它们是实例时间排序的值(value)。而且由于它们现在将在TIMESTAMPTZ启用,因此如果我不希望它们采用UTC,我可以随时向它们查询特定区域。
所以我的问题是,对于Java / JPA / PostgreSQL服务器,何时我想在TIMESTAMPTZ上使用TIMESTAMP?有哪些用例?现在,我很难理解为什么要使用TIMESTAMP,因此,我担心自己无法掌握它的值(value)。
最佳答案
您可以使用它来表示Joda-Time和新的Java 8 time API所谓的LocalDateTime
。 LocalDateTime
不代表时间轴上的精确点。它只是一组字段,从一年到十亿分之一秒。这是“用于生日的日期说明,以及挂钟上的当地时间”。
例如,您可以使用它来表示您的确切生日是1975-07-19,下午6点。否则,在2015年1月1日的00:00会庆祝下一个新年。
为了表示精确的时刻,例如阿姆斯特朗在月球上行走的时刻,带有时区的时间戳确实更合适。无论JVM的时区和数据库的时区如何,它都应返回正确的时刻。