我想将时间间隔配置存储到数据库中,如下所示:
12 hours -> 43200
24 hours -> 86400
42 hours -> 172800
72 hours -> 259200
但是我不知道如何将值86400
转换为LocalDateTime,因为我想使用该值来计算SQL查询的时间间隔。
将此值转换为LocaLDateTime的正确方法是什么?
答案 0 :(得分:2)
我建议:在您的SQL数据库中,使用一定时间,持续时间的适当数据类型,或者使用ISO 8601格式的保留持续时间的char。在Java中,请使用Duration
(切勿LocalDateTIme
)。
如果您的数据库在一定时间内具有数据类型,请考虑使用is,尽管会权衡利弊。这可能意味着您必须将持续时间值作为文本字符串与数据库之间来回传输,这并不理想。一些RDBMS声称他们的time
数据类型可以在一天中和一段时间内使用,这是一种黑客行为,但是如果您的数据库愿意将72小时显示为72:00
而不是{{1} },这绝对是优势。
如果您不能或不想使用数据库的正确数据类型,我的第二个建议是使用ISO 8601字符串。 ISO 8601格式的持续时间类似于259200
(12小时;读取时间为12小时)。可以将72小时指定为PT12H
或P3D
(假设我们可以安全地将72小时转换为3天;这并不总是正确的)。尽管这种格式看起来有些怪异,但我仍然发现它比PT72H
更易读。 259200
足以满足您的目的。
在Java中,请使用varchar(13)
。如果持续时间以Duration
的形式出现在数据库中,请搜索如何将其解析为72:00
,然后再次搜索如何将其格式化。如果它以Duration
的形式出现,则PT12H
类将直接对其进行解析:
Duration
输出:
PT12H
String durationStringFromDb = "PT12H";
Duration dur = Duration.parse(durationStringFromDb);
System.out.println(dur);
以ISO 8601格式打印回来,其Duration
方法生成该格式。如果出于某些目的需要持续时间为秒:
toString
43200
编辑:或者,如果您距离某处有几秒钟的时间,则相反:
System.out.println(dur.getSeconds());
PT48H