Java-программы в Linux Machine (часовой пояс UTC) возвращают дату в часовом поясе HDT вместо часового пояса UTC - PullRequest
0 голосов
/ 28 октября 2019

У меня есть машина linux в часовом поясе UTC.

[user@test packages]$ date +'%:z %Z'
+00:00 UTC

Запуск cat /etc/localtime также указывает на то, что мой компьютер находится в часовом поясе UTC;

[user@test ~]$ cat /etc/localtime
f2UTCTZif2UTC
UTC0

Однако, вызывая logger.info(new Date()) в приложении, работающем под управлением Tomcat под Java 1.7, возвращается что-то вроде пн 28 октября 01:51:39 HDT 2019

Это очень странно, поэтому я создал для тестирования простую Java-программу:

import java.util.Date;

class Test
{
        public static void main (String args[])
        {
                Date dt = new Date();
                System.out.println(dt);
        }
}

Скомпилируйте и запустите его

[user@test]$ /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211.x86_64/bin/javac Test.java
[user@test]$ /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.211.x86_64/bin/java Test
Mon Oct 28 02:08:49 HDT 2019

Мой вопрос заключается в том, почему моя утилита Linux возвращает дату в формате UTC, и все же мои приложения Java возвращают даты в формате HDT (я даже не знаю, что такое HDT).

Поскольку приложение, которое я поддерживаю, является устаревшим, я не могу использовать Joda Time или обновиться до Java8 или выше, так как это повлекло бы за собой множество изменений кода.

1 Ответ

2 голосов
/ 28 октября 2019

Я наконец исправляю это следующим образом:

  • Выполнить ln -fs /usr/share/zoneinfo/UTC /etc/timezone и
  • Изменить /etc/sysconfig/clock

У меня появилась идеяглядя на /etc/sysconfig/clock после прочтения https://bugs.java.com/bugdatabase/view_bug.do?bug_id=6456628

...