java - 从 joda.Datetime 转换为 time.LocalDateTime 是正确的方法吗?
问题描述
我需要数据库中日期的时间戳格式。现在我在数据库中有 joda.Datetime,但在我的 restApi 应用程序中也有。
我尝试创建一个新列,并将现有的 joda.Datetime 转换为另一列 time.LocalDateTime。我还用 time.LocalDateTime 替换了所有代码 joda.DateTime。
它可以工作,但是当我在邮递员中拨打电话时,我收到了一个像这样的 json:
{
seconds: x1,
minutes: x2,
hours: x3,
days: x4,
........
}
我想我需要一个转换器,将时间戳显示为“dd-mm-yy hh-mm-ss”
我希望数据库中有时间戳格式,以便能够按时执行 SQL 标准操作和命名查询。
在我的数据库中,我有bytea
日期类型。我将 PostgreSQL 与DBeaver一起使用。
这是正确的方法,还是您可以向我推荐另一种选择?
解决方案
这是正确的方法,还是您可以向我推荐另一种选择?
如果没有使用 PostgreSQL 的经验,我应该说这bytea
是您的日期或时间戳的错误数据类型。timestamp with time zone
很好,支持SQL操作和查询。它还具有您可以直接存储OffsetDateTime
(甚至可能是Instant
,我不确定)的优点,因此您可以避免格式化您的时间戳来存储它。那会被推荐。
将时间戳作为时间戳日期和时间是不够的。日期和时间在不同的时区会有不同的解释(在夏季时间结束和时钟倒转的秋季甚至会模棱两可)。据我了解timestamp with time zone
,将确保时间戳存储在 UTC 中,因此将是明确的时间点。在 Java 中,Instant
该类表示独立于时区的时间点,因此适用于时间戳。一些 JDBC 驱动程序允许您将 aInstant
直接存储到timestamp with time zone
列中,而另一些则要求您先转换为OffsetDateTime
。在后一种情况下使用
OffsetDateTime dateTimeForDatabase = yourInstant.atOffset(ZoneOffset.UTC);
编辑:请注意with time zone
,正如@Jon Skeet 在评论中指出的那样,这有点谎言。数据库不存储时区或偏移量,它只确保日期和时间以 UTC 格式存储,以消除关于时间点的歧义。
推荐阅读
- vba - 在使用变量更改表单中的字段时更新表/表单中的选定数据
- angular - 即使调用 ChangeDetectorRef.DetectChanges 也不会触发 Angular 7 更改检测
- ionic-framework - 有没有办法实现 Mapbox 导航 Ionic 4?
- excel - 尝试使用 Application Volatile 让单元格在每次更改时显示工作簿的名称,但不工作
- azure - 如何处理 AZcopy 失败的文件传输
- google-directions-api - Google Directions API 会在多长时间内考虑当前的交通状况
- shell - for 循环覆盖或条目重复
- mysql - 如何通过从其他表的列中获取数据并将其插入到另一个表的数据列中来进行计算?
- c# - 用于 dotnet 核心的 nustache 类似于 nuget 包
- java - 如何查找 Kafka 主题中未删除的第一条消息