Получить проблему с датой на сервере - PullRequest
0 голосов
/ 16 сентября 2009

У меня проблема с получением даты сервера (linux server). Когда я использую команду 'date' в linux, я получаю правильное значение даты (реальная дата). Если я изменю какой-то файл на сервере, изменить дату также правильно (реальная дата). Но если я использую код Java System.out.println (new Date ()) на сервере, я получаю дату с разницей в 1 час то есть результат команды linux 'date' = ср. 16 сен. 08:48:25 CEST, System.out.println (new Date ()) результат = ср. 16 сен. Это проблема конфигурации Linux или неправильное получение даты с использованием Java. Спасибо

date --rfc-2822; date +%s

Ср, 16 сентября 2009 09:59:36 +0200 1253087976

System.out.println(new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z").format(new Date()));
System.out.println(new Date().getTime() / 1000);

16 wrz 2009 09:00:33 +0100 1253088033

Ответы [ 3 ]

1 голос
/ 16 сентября 2009

Вы должны убедиться, что используете правильный часовой пояс, прежде чем использовать дату (или календарь, если на то пошло - не устарела ли дата?).

Например:

/* Skipping the boring class def part. */
public static void main(String[] args) {
    Date date = new Date();
    DateFormat myDateFormat = new SimpleDateFormat();
    TimeZone firstTime = TimeZone.getTimeZone(args[0]);
    myDateFormat.setTimeZone(firstTime);
    System.out.println("-->"+args[0]+": " + myDateFormat.format(date));
}

В качестве аргумента можно указать желаемый часовой пояс, например, «IST», «GMT» или любой другой.

0 голосов
/ 16 сентября 2009

Я предлагаю вам обновить установку Java. Вероятно, в вашей JRE не установлены последние правила перехода на летнее время. Java получает время с начала эпохи и использует ваши текущие настройки TZ для вычисления местного времени. Правила DST время от времени меняются, и в этом случае необходимо обновлять и операционную систему, и JDK.

Можете ли вы добавить вывод следующего вопроса:

# unix
date --rfc-2822; date +%s

# Java
System.out.println(new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z").format(new Date()));
System.out.println(new Date().getTime() / 1000);

Должны оба вывести что-то вроде:

Wed, 16 Sep 2009 17:26:08 +1000
1253085968
0 голосов
/ 16 сентября 2009

Вероятно, это проблема часового пояса / перехода на летнее время. Использование:

java.util.Timezone.getDefault()

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

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