Я пытаюсь использовать класс 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 по Гринвичу, есть ли связь между этой информацией и моей проблемой?
Используйте ZonedDateTime.now(). Instant не имеет часового пояса или находится в часовом поясе UTC, в зависимости от того, как вы на это смотрите.
Да, вы правы, но у меня остался один вопрос: почему мы можем передавать зону в качестве параметра объектам часов, в то время как в классе часов нет метода, который выдает время с часовым поясом?




Как указал @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]
Да, вы правы, но у меня остался один вопрос: почему мы можем передавать зону в качестве параметра объектам часов, в то время как в классе часов нет метода, который выдает время с часовым поясом?
Пожалуйста, прочтите официальный документ Instant в Java docs.oracle.com/javase/8/docs/api/java/time/Instant.html.
Мгновение не имеет часового пояса.