从joda.Datetime转换为time.LocalDateTime是正确的方法吗?

时间:2019-02-05 09:26:31

标签: java datetime time jodatime joda-convert

我需要时间戳格式来存储数据库中的日期。 现在,我在数据库中有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一起使用。

这是正确的方法,还是您可以推荐我另一种选择?

1 个答案:

答案 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中,以消除时间点上的歧义。

链接: Date/Time Types in the PostgreSQL docs