如何在 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.Duration
或 java.util.concurrent.TimeUnit
:
long nanosInOneDay = java.time.Duration.ofDays(1).toNanos();
或
long nanosInOneDay = java.util.concurrent.TimeUnit.DAYS.toNanos(1);
我正在从 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.Duration
或 java.util.concurrent.TimeUnit
:
long nanosInOneDay = java.time.Duration.ofDays(1).toNanos();
或
long nanosInOneDay = java.util.concurrent.TimeUnit.DAYS.toNanos(1);