Как преобразовать десятичное значение в 24-часовой формат времени в JAVA - PullRequest
0 голосов
/ 06 августа 2020

Я получаю значения времени из SQLServer, которые отображаются как 0,0833333333333333, тогда как изначально это 02:00 в 24-часовом формате. Теперь мне нужно преобразовать это десятичное значение 0,0833333333333333 в 02:00 для дальнейшего кодирования. Есть ли какой-нибудь прямой / простой способ сделать это в JAVA?

Ответы [ 2 ]

1 голос
/ 06 августа 2020

Вот пример с использованием 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 - без пробела.

LocalTime содержит значение времени без какой-либо информации о часовом поясе.

Вы можете увидеть список доступных вариантов форматирования здесь .

Обновить

Как указывает Оле В.В., вы можете сделать код более понятным, упростив умножение. Используйте java.time.Duration или java.util.concurrent.TimeUnit:

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

или

long nanosInOneDay = java.util.concurrent.TimeUnit.DAYS.toNanos(1);
0 голосов
/ 06 августа 2020

Вот пример:

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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...