Мы получаем «org.postgresql.util.PSQLException: ERROR: неверный синтаксис ввода для метки времени типа: «Wed Jun 26 23:27:35 TRT 2024»» в качестве исключения, когда наше приложение пытается вставить заданную дату в столбец временной метки (PostgreSQL). Я предполагаю, что это из-за часового пояса TRT, а не EET. Это происходит только на одном из наших серверов Linux, а не на других, что указывает на то, что это проблема окружающей среды, но я не смог определить, что может быть ее причиной. Мы используем новую дату (System.currentTimeMillis()) для получения даты.
Я пробовал проверить часовой пояс серверов с помощью date и datectl, но они идентичны обоим они находятся в часовом поясе GMT+3. Я также создал небольшое приложение для проверки JVM и часового пояса пользователя. Вот код:
Код: Выделить всё
System.out.println("JVM Time Zone : " + java.util.TimeZone.getDefault().getID());
System.out.println("User Time Zone : " + System.getProperty("user.timezone"));
System.out.println("Milliseconds : " + System.currentTimeMillis());
Date date = new Date(System.currentTimeMillis());
System.out.println(date.toString());
Когда я запустил это приложение, оно дало одинаковый результат на обоих серверах (несмотря на разницу во времени в миллисекундах, которое мне требуется для запуска приложения). Я также использовал команду locale, чтобы проверить, есть ли какая-либо разница в локали серверов, но она была одинаковой. Еще я проверил версии Java, поскольку, по-видимому, часовой пояс меняется между Java 1.8 и Java 17 для Турции. В то время как 17 давало TRT, 1.8 давало EET в качестве часового пояса, когда я запускал его на своем локальном компьютере. Итак, я проверил версии Java между серверами, но они оказались одинаковыми. Я также проверил, передаются ли какие-либо параметры при запуске используемого нами сервера Jboss. Вот параметры, когда я смотрю на процессы:
Код: Выделить всё
java -D[Standalone] -server -XX:+UseCompressedOops -verbose:gc -Xloggc:/opt/jboss-eap-6.4/standalone1/log/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -Xms2048m -Xmx2048m -XX:MaxPermSize=512m -Djava.net.preferIPv4Stack=true -Djboss.modules.system.pkgs=org.jboss.byteman -Djava.awt.headless=true -Djboss.modules.policy-permissions=true -Dorg.jboss.boot.log.file=/opt/jboss-eap-6.4/standalone1/log/server.log -Dlogging.configuration=file:/opt/jboss-eap-6.4/standalone1/configuration/logging.properties -jar /opt/jboss-eap-6.4/jboss-modules.jar -mp /opt/jboss-eap-6.4/modules -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -Djboss.home.dir=/opt/jboss-eap-6.4 -Djboss.server.base.dir=/opt/jboss-eap-6.4/standalone1 -Djboss.server.base.dir=/opt/jboss-eap-6.4/standalone1 -Djboss.bind.address= -Djboss.bind.address.management= --server-config=standalone.xml
Я проверил этот пост, но он отличается от этого вопроса, поскольку в этой проблеме он показывает тот же результат при использовании timedatectl. У нас есть несколько приложений, которые используют новую дату (System.currentTimeMillis()) для получения текущей даты, поэтому, если есть решение, не требующее ее изменения, я был бы признателен.
Подробнее здесь:
https://stackoverflow.com/questions/786 ... t-linux-se