我需要时间戳格式来存储数据库中的日期。 现在,我在数据库中有joda.Datetime,在我的restApi应用程序中也有。
我试图创建一个新列,并将现有的joda.Datetime转换为另一列time.LocalDateTime。我也用time.LocalDateTime替换了所有代码joda.DateTime。
它可以工作,但是当我在邮递员中进行get呼叫时,我收到了一个json,如:
{
seconds: x1,
minutes: x2,
hours: x3,
days: x4,
........
}
我认为我需要一个转换器,以将时间戳显示为“ dd-mm-yy hh-mm-ss”
我希望数据库中具有时间戳格式,以便能够执行SQL标准操作并按时命名查询。
在我的数据库中,日期的类型为bytea
。我将PostgreSQL与DBeaver一起使用。
这是正确的方法,还是您可以推荐我另一种选择?
答案 0 :(得分:0)
这是正确的方法,还是您可以推荐我另一种选择?
没有PostgreSQL经验,我应该说bytea
是您的日期或时间戳记错误的数据类型。 timestamp with time zone
很不错,并且支持SQL操作和查询。它的另一个优点是,您可以直接存储OffsetDateTime
(我不确定甚至可能是Instant
,因此避免了格式化时间戳以进行存储。推荐。
将时间戳记用作时间戳记的日期和时间是不够的。在不同的时区,一天中的日期和时间将有不同的解释(在夏令时结束并且时钟向后旋转的秋天,甚至是模棱两可的)。据我了解,timestamp with time zone
将确保时间戳存储在UTC中,因此时间点将是明确的。在Java中,Instant
类表示时间点,与时区无关,因此对于时间戳来说是有益的。某些JDBC驱动程序允许您将Instant
直接存储到timestamp with time zone
列中,另一些则需要您首先转换为OffsetDateTime
。在后一种情况下使用
OffsetDateTime dateTimeForDatabase = yourInstant.atOffset(ZoneOffset.UTC);
编辑:请注意,{@ {1}}有点谎言,就像@Jon Skeet在评论中指出的那样。该数据库不存储时区或偏移量,仅确保将日期和时间存储在UTC中,以消除时间点上的歧义。