Android Java получить текущее время в 24-часовом формате - PullRequest
0 голосов
/ 30 августа 2018

Я пытаюсь получить текущее время в 24-часовом формате, используя код ниже:

Calendar cal = Calendar.getInstance();
int currentHour = cal.get(Calendar.HOUR);
int currentMinute = cal.get(Calendar.MINUTE);

System.out.println(currentHour);
System.out.println(currentMinute);

Мое текущее время 3.11PM по сингапурскому времени. Но затем, когда я выполняю код выше, я получаю 7.09. Есть идеи?

Спасибо заранее!

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Я уже понял решение:

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT+8"));
currentHour = cal.get(Calendar.HOUR_OF_DAY);
currentMinute = cal.get(Calendar.MINUTE);

Код выше возвращает именно то, что я хотел

0 голосов
/ 30 августа 2018

Я не могу быть уверен в информации, которую вы предоставили, но вероятная причина в том, что настройка часового пояса вашей JVM - UTC. Если вы запустили свою программу, скажем, в 15:09:55 по сингапурскому времени, это вывело бы как 7 и 9 в UTC. Если вы затем прочитаете свои часы по сингапурскому времени чуть более минуты спустя или прочитаете их с часов, которые не были идеально синхронизированы с вашим устройством (или имитатором), они показывали бы 15:11.

JVM обычно получает настройку часового пояса с устройства, но могут быть разные причины, по которым он получает его откуда-то еще.

Как сказал Антон А. в комментарии, вам нужно HOUR_OF_DAY вместо HOUR для 24-часового формата (хотя время было 7:09 утра в UTC, поэтому эта ошибка не была причиной неожиданного часа в вашем случае).

java.time

Современный способ печати текущего времени:

    System.out.println(LocalTime.now(ZoneId.of("Asia/Singapore")));

Класс Calendar, который вы использовали, давно устарел и плохо спроектирован. LocalTime - это класс из java.time, современного Java-API даты и времени, который представляет время дня (без часового пояса, но метод now принимает часовой пояс для инициализации текущего времени в этом поясе). , Если ваше Android-устройство меньше нового (на уровне API 26), вам потребуется библиотека ThreeTenABP , чтобы использовать ее. См. Как использовать ThreeTenABP в Android Project .

Еще одна ссылка: Обучающая программа Oracle: Дата и время , объясняющая, как использовать java.time.

0 голосов
/ 30 августа 2018

Это даст вам время в 24-часовом формате

public String getFormattedTime() {
    Calendar calendar = Calendar.getInstance();
    SimpleDateFormat dateFormatter = new SimpleDateFormat("HH:mm:ss", Locale.getDefault());
    return dateFormatter.format(calendar.getTime());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...