Почему java.util.Date дает мне неправильное время? - PullRequest
7 голосов
/ 23 февраля 2012
System.out.println(new Date());

Thu Feb 23 04:57:57 ACT 2012

Я запускаю его в основном методе. И в моей системе текущее время - ПКТ. Но это дает мне время ACT.

Есть идеи? Как получить правильное системное время?

enter image description here

Ответы [ 3 ]

7 голосов
/ 23 февраля 2012

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

import java.util.TimeZone ;

public class Test {
    public static void main(String[] args) throws Exception {
        TimeZone zone = TimeZone.getDefault();
        System.out.println(zone.getDisplayName());
        System.out.println(zone.getID());
    }
}

Например, для меня это печатает:

Greenwich Mean Time
Europe/London

Как только вы узнаете больше информации о том, что Java считает вашим часовым поясом по умолчанию, вы можете начать искать почему так думает. Есть ли что-нибудь о том, как вы используете Java, что является нестандартным? Какие-либо переменные окружения, которые подозрительно похожи на неправильный часовой пояс?

Вы также можете распечатать следующие системные свойства, которые используются при определении часового пояса:

user.timezone
user.country
java.home

(Распечатайте их до получения часового пояса по умолчанию - user.timezone устанавливается как часть его извлечения, если он не был установлен ранее.)

3 голосов
/ 23 февраля 2012

Возможно, вы «принудили» свою часовую зону где-то еще в своем коде или в связанных библиотеках

static {
      TimeZone.setDefault(anotherTimeZone);
}

Это вызовет такое поведение, даже в основном.

1 голос
/ 23 февраля 2012

java.util.Date дает системную дату. Измените системное время UTC на GMT.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...