LINUX.ORG.RU

Java timezone


0

1

Есть Java приложение, работает через Java Web Start (jre 1.4.03). Работать должно под Windows XP\7, проблема с timezone, в приложении дата смешена на 1 час назад. Пробывал прмиенять\отменять патчи от майкрософта на таймзоны, пробывал применять\отменять патч на таймзоны от Java - нифига. На WinXp починилось установкой вручную зоны «GMT+4 Абу Даби\Мускат» На Win7 не помогает никак. Мучался пол дня с этой фигней.

Щас дома на чистой 7рке в виртуалке поставил jre\jdk 1.4.03 Написал простенькую проверку:

import java.util.*;
import java.text.*;

public class Test {
	public static void main(String[] args){
		TimeZone ts = TimeZone.getDefault();
		DateFormat format = new SimpleDateFormat("yyyy:MM:dd HH:mm");
		Date now = new Date();
		System.out.println(ts.getDisplayName());
		System.out.println(format.format(now));
	}
}

Если запускаю так: java -Duser.timezone=GMT+4 Test.java

то все хорошо и ключ подхватывается. Но если я вношу этот же ключ в Java Runtime Parametrs (пуск-панель-java plugin) или в JAVA_OPTS то результата никакого, как будто их не видно. Можно ли как-то глобально задать этот ключ, сталкивался кто-нибудь с такой проблемой, прошу вашей помоши. Спасибо.



Последнее исправление: Megamozg (всего исправлений: 1)

.кафнив аН

anonymous
()

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

-TimeZone.getDefault()
+Glue.get(Configuration.class).getTimeZone()

а в конфигурации настраивается временная зона, ибо у 99% то ява протухшая то винда пиратская времен мамая.

Deleted
()
Ответ на: комментарий от Deleted

то что версия старая это конечно хреново, но завязано именно на ней приложение, на 1.6 и 1.7 оно работает, но отваливаются части и проблема с датами не решается на win7 - возможно я что-то делаю не так, поэтому уже и прошу помощи, все логические махинации испробовал(

Megamozg
() автор топика
Ответ на: комментарий от Megamozg

на 1.6 у многих ява со старой таймзоной,

потому я и предлагаю получать ее через конфигурацию приложения а не явы, ибо мало кто тебя поблагодарит за приложение рази которого надо настраивать jre

Deleted
()
Ответ на: комментарий от Deleted

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

Впринципе должна помочь глобальная установка ключа -Duser.timezone=... , но у меня не получается его применить, не через переменные окружения, не через deployment.properties, мб я не в ту сторону копаю?

Megamozg
() автор топика
Ответ на: комментарий от Deleted

Через *.jlnp файл, опция -Duser.timezone тоже не работает, пробывал как ключ к jre так и в <properties ... />, нагуглил, что не работате если приложение не подписано этим (не знаю как правильно) «манифестом».

Megamozg
() автор топика
Ответ на: комментарий от Megamozg

На 1.7 тоже если через настройку в Java Runtime Parameters добавить -Duser.timezone , ничего не происходит, воспринимает только напрямую через консоль, я точно что-то не так наверно делаю(

Megamozg
() автор топика
Ответ на: комментарий от Megamozg

ну можно попробовать дернуть System.setProperty(«user.timezone»,«GMT+4»); в первом методе програмы

если сорцы потерялись то в jar можно засунуть враппер который будет делать эту хрень а потом передавать управления старому коду

Deleted
()
Ответ на: комментарий от Deleted

Над этим думал уже, правда так сразу не знаю как запихать вызов в jar уже готовый, сорцов нет, буду гуглить. Спасибо что пытаетесь помочь.

Megamozg
() автор топика
Ответ на: комментарий от Megamozg

запихать не проблема, если не подписан правда, jar - просто zip архив, какой класс вызывать там написано или в манифесте или в дексрипторе развертывания , т.е. суешь свой и меняешь имя класса

Deleted
()

Чтобы отразить «законодательную фиксацию бага в айфоне», Oracle выпустил обновление базы часовых поясов. Вообще, эти обновления более частые, чем обновления JVM (видать, айфонами балуются не только в России), поэтому выходят отдельными пакетами. Найти обновление можно здесь, ищите «JDK DST Timezone Update Tool - 1.3.53», качайте и ставьте. В ReadMe описан процесс, в частности, то, что необходимо иметь права для записи в директорию JRE.

Kuka ★★
()
Ответ на: комментарий от Kuka

Я не хочу ничего на айфоне делать, у меня местный оффтопик негодует) timezone update toll я уже знаю она не исправляет проблемы к сожалению(

Megamozg
() автор топика
Ответ на: комментарий от Megamozg

timezone update toll я уже знаю она не исправляет проблемы к сожалению(

А, прошу прощения, был невнимателен.

На моей практике tzupdater благополучно исправлял проблему (но это был парк линуксовых серверов с JRE 1.6). Проверьте, точно ли обновился файл $JRE_PATH/lib/zi/Europe/Moscow, и корректно ли выставлена timezone в Windows.

Kuka ★★
()
Ответ на: комментарий от Kuka

Щас есть 2 версии 1.4.2_03 и 1.7

Запускаю на 1.4: java -version:1.4 Test

Greenwich Mean Time

Запускаю на 1.7: java -version:1.7 Test

Moscow Standart Time

Пробовал даже просто папку «zi» от 1.7 перекинуть в 1.4 ничего не меняется... возможно что-то еще надо перекинуть, походу update tool не обновила мне эти зоны...

Megamozg
() автор топика
Ответ на: комментарий от Deleted

На более поздних версиях даже на 1.4.2_19 отваливается JasperReports я честно хз как-там что написанно и куда прибито гвоздями( Еще поэксперементировал специально на чистых 1.4.2_03 и 1.7 запустил tzupdate - везде обновились файлы, но 1.4.2 как буд-то этого не замечает - выдает Greenwich Mean Time стабильно...

Megamozg
() автор топика
Ответ на: комментарий от Deleted

Тоже так думаю.... 1.4.2_19 - определяет время правильно... щас буду все от 03 до 19 смотреть, в надежде что где-нибудь совпадет всё что отваливается, но это блин бред какой-то(

Megamozg
() автор топика
Ответ на: комментарий от Deleted

Вообщем с версии 1.4.2_14 начинается нормальное определение зон и патч применяется, щас немогу проверить Jaspereports, завтра утром проверю - отпишусь, вдруг кому еще поможет.

Megamozg
() автор топика

Пробывал
пробывал

Аааааа! Grammar Nazi, kill'em all!

anonymous
()

jre 1.4.03

jre 1.4.2 ещё поддерживается (для корпоративных клиентов), должна быть версия с уже поправленными tz. Найди ещё и ставь.

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Решил проблему таким образом:

Проверил все версии от 1.4.2_03 до 1.4.2_19 (запускал свою тестовую программку без патча, применял патч tzupdatetool и снова запускал. На всех версиях от 1.4.2_03 до 1.4.2_13 включительно, патч никаких результатов не давал. Т.е. он обновлял зоны в папке zi всё хорошо, но определял все время системное время как просто Greenwich Mean Time при любом системном часовом поясе.

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

Так же на версии 1.4.2_14 работали все компоненты программки включая JasperReports, т.е. работало все что мне было нужно - все довольны. После 1.4.2_14 JasperReports отваливались, видимо старая версия с чем-то там не совместима, вообщем нашел пограничную рабочую версию.

Всем спасибо за помощь.

Megamozg
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.