Estou tentando executar um programa Java, mas está tomando um fuso horário GMT padrão em vez de um fuso horário definido pelo SO. Minha versão do JDK é 1.5 e o sistema operacional é o Windows Server Enterprise (2007)
O Windows possui um fuso horário Central especificado, mas quando executo o programa a seguir, ele fornece um horário GMT.
import java.util.Calendar;
public class DateTest
{
public static void main(String[] args)
{
Calendar now = Calendar.getInstance();
System.out.println(now.getTimeZone());
System.out.println(now.getTime());
}
}
Aqui está a saída
sun.util.calendar.ZoneInfo[id="GMT",
offset=0,
dstSavings=0,
useDaylight=false,
transitions=0,
lastRule=null]
Mon Mar 22 13:46:45 GMT 2010
Observe que não desejo definir o fuso horário do aplicativo. Desejo que o fuso horário usado pela JVM seja o especificado no SO. (Não estou encontrando esses problemas com outros servidores com a versão 1.4 do JDK e Microsoft Server 2003).
Qualquer pensamento seria muito apreciado.
DateTest
classe?-Duser.timezone
valorRespostas:
Você pode passar a JVM neste parâmetro
Por exemplo
e isso deve fazer o truque. Definir a variável de ambiente TZ também faz o truque no Linux.
fonte
Você também pode definir o fuso horário padrão no seu código usando o código a seguir.
Para o seu
fonte
A resposta aceita acima:
Não funcionou exatamente para mim. Eu só consegui alterar meu fuso horário com sucesso quando não tinha aspas nos parâmetros:
fonte
No Windows 7 e no JDK6, tive que adicionar
-Duser.timezone="Europe/Sofia"
à variável de sistema JAVA_TOOL_OPTIONS localizada em "Meu computador => Propriedades => Configurações avançadas do sistema => Variáveis de ambiente".Se você já tiver alguma outra propriedade definida,
JAVA_TOOL_OPTIONS
basta anexar um espaço e, em seguida, insira sua sequência de propriedades.fonte
Duas opções que acho que não foram abordadas nas outras respostas:
Evite a necessidade
Tudo o que você faz para definir o fuso horário padrão da JVM, é muito difícil garantir que ninguém mais o defina de maneira diferente. Pode ser definido a qualquer momento, sem aviso prévio de outra parte do seu programa ou de outro programa em execução na mesma JVM. Portanto, em suas operações de horário, seja explícito sobre qual fuso horário você deseja e sempre saberá o que obtém independentemente da configuração da JVM. Exemplo:
Exemplo de saída:
System.setProperty
Para muitos propósitos, o seguinte não será o caminho preferido e certamente pode ser mal utilizado. Para programas de "jogar fora", às vezes acho prático. Você também pode definir uma propriedade do sistema no Java:
Isso acabou de ser impresso:
Se você deseja validar a string que está passando, use:
fonte
Se você estiver usando o Maven :
fonte
mvn spring-boot:run -Drun.jvmArguments="-Duser.timezone=UTC"
para o Spring Boot v1.No win7, se você quiser definir o fuso horário correto como um parâmetro no JRE, precisará editar o arquivo
deployment.properties
armazenado no caminho,c:\users\%username%\appdata\locallow\sun\java\deployment
adicionando a sequênciadeployment.javaws.jre.1.args=-Duser.timezone\=
my_time_zonefonte