Есть ли в JDK класс для представления часа дня, но не обязательно определенного часа на определенную дату? - PullRequest
1 голос
/ 12 июля 2011

Есть ли в JDK или Guava класс для представления часа дня, но не обязательно определенного часа на определенную дату?Если нет, то почему?

Ответы [ 3 ]

1 голос
/ 12 июля 2011

В JDK 1.3-1.7 ответ - нет. Определенное время в течение дня намного легче вычислить, чем дату, потому что вам не нужно иметь дело с високосным годом, високосным месяцем, такими головными болями. Достаточно простого целого числа. Когда вам нужно преобразовать время в строку локали, используя SimpleDateFormatter или что-то еще, вы можете просто преобразовать время в дату, просто проигнорировав часть даты:

int time = 8 * 60 + 34; // 8:34 am
Date date = new Date(60000L * time);

Сброс часового пояса до +0 и передача даты в форматер:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("GMT+0"));
sdf.format(date);
1 голос
/ 12 июля 2011

Вы можете просто обернуть byte в класс и каждый раз, когда текущий час проходит 23 в вашем методе increment() (или соответствующем имени), устанавливать значение byte равным 0, и всякий раз, когда значениепроходит ниже 0 в вашем decrement() (или соответствующем имени) методе, установите значение byte равным 23.

0 голосов
/ 12 июля 2011

Насколько я знаю, нет определенного класса, представляющего Hour (в JDK или Guava), но есть простые в использовании классы для извлечения часов из определенного момента времени (то, чем я являюсьпри условии, что вы задаетесь этим вопросом).

Вы можете использовать JODA-Time, как упоминает Пало Эберманн, но это внешняя библиотека.В JDK есть класс Calendar, который имеет много полезных методов.

Чтобы получить час long, представляющего текущее время, вы можете сделать это:

Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
int hour = c.get(Calendar.HOUR); //returns 0-11
int hourOfDay = c.get(Calendar.HOUR_OF_DAY); //returns 0-23
...