【问题标题】:Convert integer value into LocalDateTime将整数值转换为 LocalDateTime
【发布时间】:2020-03-12 22:41:18
【问题描述】:

我想像这样将时间间隔配置存储到数据库中:

12 hours -> 43200
24 hours -> 86400
42 hours -> 172800
72 hours -> 259200

但我不知道如何将值 86400 转换为 LocalDateTime,因为我想使用此值来计算 SQL 查询的时间间隔。

将这个值转换为LocalLDateTime的正确方法是什么?

【问题讨论】:

  • 嗨,看看你的答案是否在这里:stackoverflow.com/questions/25458832/…祝你有美好的一天!
  • 简单的12 * 60 * 60 计算有什么问题?
  • 您确定需要LocalDateTime 而不是period or duration 吗?
  • @NicholasK 你能给我看一下代码示例吗?
  • 据我所知,12 小时是 duration 而不是日期时间值。

标签: java time java-time hour


【解决方案1】:

我建议:在您的 SQL 数据库中,使用适当的数据类型来表示时间量、持续时间或以 ISO 8601 格式保存持续时间的字符。在 Java 中使用Duration(从不使用LocalDateTIme)。

如果您的数据库有一段时间的数据类型,请考虑使用 is,但要权衡利弊。这可能意味着您必须将持续时间值作为文本字符串传入和传出数据库,这并不理想。一些 RDBMS 声称他们的 time 数据类型可以在一天中的某个时间和一段时间内使用,这是一种黑客行为,但是如果您的数据库乐于将 72 小时显示为 72:00 而不是 259200,那绝对是一个优势.

如果您不能或不想使用正确的数据库数据类型,我的第二个建议是 ISO 8601 字符串。持续时间的 ISO 8601 格式类似于PT12H(12 小时;读取为 12 小时的时间段)。 72 小时可以指定为P3DPT72H(假设我们可以安全地将 72 小时转换为 3 天;这并不总是正确的)。虽然这种格式看起来有点奇怪,但我仍然觉得它比259200 更具可读性。 varchar(13) 左右应该足以满足您的目的。

在 Java 中使用Duration。如果持续时间从您的数据库中以72:00 出现,请搜索如何将其解析为Duration,然后再次搜索如何将其格式化。如果是PT12HDuration 类会直接解析:

    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

链接

【讨论】:

  • 谢谢。我想使用 Duration 来获得以秒为单位的时间间隔。如果我有 172800 秒,你能告诉我如何将其转换为 Java Duration 吗?
  • 这很简单,@PeterPenzov。你试过the documentation吗?无论如何,我已经编辑了。
猜你喜欢
  • 1970-01-01
  • 2021-11-26
  • 2016-04-10
  • 1970-01-01
  • 2016-07-17
  • 2021-06-02
  • 2019-11-27
  • 2012-02-18
相关资源
最近更新 更多