Класс Java Clock не дает мне текущее время

Я пытаюсь использовать класс Clock, чтобы получить текущее время.

public class TestClock {
  public static void main(String[] args) {
    Clock c = Clock.systemDefaultZone();
    System.out.println(c.instant());
  }
}

Но проблема в том, что он не дает мне текущее время, но это дает:

(the current time - 3 hours)

Поэтому я решил быть более точным и указать программе город, в котором я живу. (Бейрут)

public class TestClock {
  public static void main(String[] args) {
    ZoneId zone = ZoneId.of("Asia/Beirut");
    Clock c = Clock.system(zone);
    System.out.println(c.instant());
  }
}

Кроме того, это дает мне:

(the current time - 3 hours).

Так в чем проблема?

Примечание: в Ливане-Бейруте время +3 по Гринвичу, есть ли связь между этой информацией и моей проблемой?

Мгновение не имеет часового пояса.

luk2302 11.06.2019 09:03

Используйте ZonedDateTime.now(). Instant не имеет часового пояса или находится в часовом поясе UTC, в зависимости от того, как вы на это смотрите.

Erwin Bolwidt 11.06.2019 09:04

Да, вы правы, но у меня остался один вопрос: почему мы можем передавать зону в качестве параметра объектам часов, в то время как в классе часов нет метода, который выдает время с часовым поясом?

user9152856 11.06.2019 09:27
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
415
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как указал @Erwin Bolwidt, используйте ZonedDateTime и пройдите зону.

public class TestClock {
    public static void main(String[] args) {
        ZoneId zone = ZoneId.of("Asia/Beirut");
        ZonedDateTime zdt = ZonedDateTime.now(zone);
        System.out.println(zdt);
    }
}

Результат:

2019-06-11T10:07:20.447+03:00[Asia/Beirut]

Да, вы правы, но у меня остался один вопрос: почему мы можем передавать зону в качестве параметра объектам часов, в то время как в классе часов нет метода, который выдает время с часовым поясом?

user9152856 11.06.2019 09:17

Пожалуйста, прочтите официальный документ Instant в Java docs.oracle.com/javase/8/docs/api/java/time/Instant.html.

Alexpandiyan Chokkan 11.06.2019 09:28

Другие вопросы по теме