首页 > 解决方案 > 如何在 JAVA 中将十进制值转换为 24 小时时间格式

问题描述

我从 SQLServer 检索时间值,显示为 0.0833333333333333,而它最初是 24 小时格式的 02:00。现在,我需要将此十进制值 0.0833333333333333 转换为 02:00 以进行进一步编码。在 JAVA 中是否有任何直接/简单的方法可以做到这一点?

标签: javadatetimedecimaldecimalformat

解决方案


这是一个示例,使用 12 小时制,上午/下午,但使用java.time类:

// no offset, no time zone:
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

...

double d = 0.7826388888888889;
long nanos = Math.round(d * 24L * 60L * 60L * 1_000_000_000L);
LocalTime localTime = LocalTime.ofNanoOfDay(nanos);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("h:mm a");
System.out.println(localTime.format(formatter));

此示例打印以下内容:

6:47 PM

如果你愿意,你可以用"h:mma"得到6:47PM- 没有空间。

LocalTime保存没有任何时区信息的时间值。

您可以在此处查看可用格式选项的列表。

更新

正如 Ole VV 指出的那样,您可以通过简化乘法来使代码更清晰。使用java.time.Durationjava.util.concurrent.TimeUnit

long nanosInOneDay = java.time.Duration.ofDays(1).toNanos();

或者

long nanosInOneDay = java.util.concurrent.TimeUnit.DAYS.toNanos(1);

推荐阅读