Java 将整数值转换为LocalDateTime
我想将时间间隔配置存储到数据库中,如下所示:Java 将整数值转换为LocalDateTime,java,time,java-time,hour,Java,Time,Java Time,Hour,我想将时间间隔配置存储到数据库中,如下所示: 12 hours -> 43200 24 hours -> 86400 42 hours -> 172800 72 hours -> 259200 但我不知道如何将值86400转换为LocalDateTime,因为我想使用该值来计算SQL查询的时间间隔 将此值转换为LocaLDateTime的正确方法是什么?我建议:在SQL数据库中,使用适当的数据类型表示一定的时间量、持续时间,或者使用ISO 8601格式的字符表示持续时间
12 hours -> 43200
24 hours -> 86400
42 hours -> 172800
72 hours -> 259200
但我不知道如何将值86400
转换为LocalDateTime,因为我想使用该值来计算SQL查询的时间间隔
将此值转换为LocaLDateTime的正确方法是什么?我建议:在SQL数据库中,使用适当的数据类型表示一定的时间量、持续时间,或者使用ISO 8601格式的字符表示持续时间。在Java中使用
Duration
(从不LocalDateTIme
)
如果你的数据库有一个数据类型持续一段时间,考虑使用IS,尽管要权衡正反两方面。这可能意味着您必须将持续时间值作为文本字符串在数据库中来回传输,这并不理想。一些RDBMS声称他们的
time
数据类型既可以用于一天中的某个时间,也可以用于某个持续时间,这是一种攻击,但如果您的数据库乐意将72小时显示为72:00
,而不是259200
,这肯定是一种优势
如果您不能或不想使用正确的数据库数据类型,我的第二个建议是ISO8601字符串。ISO 8601格式的持续时间类似于PT12H
(12小时;读作12小时的时间段)。72小时可以表示为P3D
或PT72H
(假设我们可以安全地将72小时转换为3天;这并不总是正确的)。虽然这种格式看起来有点奇怪,但我仍然觉得它比259200
更可读varchar(13)
大概就足够了
在Java中,使用持续时间。如果持续时间从数据库中显示为72:00
,请搜索如何将其解析为持续时间,然后再次搜索如何重新格式化。如果它是PT12H
,则Duration
类将直接解析:
String durationStringFromDb = "PT12H";
Duration dur = Duration.parse(durationStringFromDb);
System.out.println(dur);
输出:
PT12H
Duration
以ISO 8601格式打印回来,它的toString
方法生成该值。如果出于某种目的需要将持续时间设置为秒:
System.out.println(dur.getSeconds());
43200
编辑:或者另一种方式,如果您从某处获得了秒数:
int numberOfSeconds = 172800;
Duration dur = Duration.ofSeconds(numberOfSeconds);
System.out.println(dur);
PT48H
链接
- 在维基百科上
您好,检查您的答案是否不在这里:祝您愉快!简单的12*60*60
计算有什么问题?您确定需要LocalDateTime
而不是?@NicholasK您能给我举个代码示例吗?据我所知,12小时是一个时间值,而不是一个日期时间值。谢谢。我想使用Duration来获得一些以秒为单位的时间间隔。你能告诉我,如果我有172800秒,如何将其转换为Java持续时间吗?这同样微不足道,@PeterPenzov。你试过了吗?无论如何,我已经编辑过了。