gpt4 book ai didi

java - 如何将 java.time.Duration 转换为 java.sql.Time?

转载 作者:行者123 更新时间:2023-11-29 08:43:45 24 4
gpt4 key购买 nike

java.time.Duration 对象转换为 java.sql.Time 的最佳方法是什么?

我得到一个像 PT15M51S 这样的 ISO8601 字符串,Duration.parse(String s) 非常适合这种情况。

但现在我正在努力如何使用 setTime(java.sql.Time time) 将 java.sql.Time 放入 PreparedStatement 使用 JDBC 将其存储在我的 MySQL 数据库中。

我最终写了一个来自 org.apache.commons.lang3.time.DurationFormatUtils 的绦虫:

java.sql.Time.valueOf(DurationFormatUtils.formatDurationHMS(video.getDuration().toMillis())))

下一个问题:如何从 java.sql.Time 获取 java.time.Duration

最佳答案

A java.sql.Time 不是持续时间,它是一天中的时间(即正常的 24 小时制)。在其中存储持续时间是一种 hack,如果持续时间超过 24 小时,该 hack 就会中断。您最好将其存储为 ISO 持续时间字符串,或数字数据类型(例如 double 或数字),或者如果您的数据库支持它:在 interval 中。 .

但是,如果您仍想将持续时间存储在 sql 中 TIME :来自java.time的转换点至 java.sql.Timejava.time.LocalTime使用 java.sql.Time.valueOf(LocalTime) .所以要从 Duration 转换至 java.sql.Time你可以这样做:

Duration duration = ..;
LocalTime localTime = LocalTime.MIDNIGHT.plus(duration);
java.sql.Time sqlTime = java.sql.Time.valueOf(localTime);

转换回来是:

java.sql.Time sqlTime = ..;
LocalTime localTime = sqlTime.toLocalTime();
Duration duration = Duration.between(LocalTime.MIDNIGHT, localTime);

请注意 java.sql.Time可能只有几秒钟的精度。使用 JDBC 4.2 兼容的驱动程序转换为 java.sql.Time没有必要,因为存储 java.time.LocalTime直接使用 setObject(1, <your LocalTime>) 支持和 getObject(1, java.time.LocalTime.class) .

关于java - 如何将 java.time.Duration 转换为 java.sql.Time?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38033125/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com