如何在 JAVA 中将十进制值转换为 24 小时时间格式

How to convert decimal value to 24 hour time format in JAVA

我正在从 SQLServer 中检索显示为 0.0833333333333333 的时间值,而它最初是 02:00 24 小时格式。现在,我需要将这个十进制值 0.0833333333333333 转换为 02:00 以进行进一步编码。在 JAVA 中有 direct/simple 的方法吗?

这是一个例子:

double d = 0.0833333333333333;
Date date = new Date(Math.round(d * 24L * 60L * 60L * 1000L));
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
System.out.println(format.format(date));

这里是一个例子,使用 12 小时格式,AM/PM,但使用 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 - 没有 space.

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

您可以看到可用格式选项列表 here

更新

作为 Ole V.V。指出,您可以通过简化乘法使代码更清晰。使用 java.time.Durationjava.util.concurrent.TimeUnit:

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

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