简体   繁体   中英

Java System.getProperty( “user.timezone” ) does not work

When I start java program by java -Duser.timezone="UTC" ,

System.out.println( System.getProperty( "user.timezone" ) );
System.out.println( new Date() ); // prints time in UTC 

prints UTC time, but when I set in code like:

System.setProperty( "user.timezone", "UTC" );
System.out.println( System.getProperty( "user.timezone" ) );  // prints 'UTC'
System.out.println( new Date() ); // prints time in local zone, not in UTC

does not print time in UTC . I need to set time in code. Not looking for Joda

Environment: JDK 1.6 / Windows XP

Please help. Thanks much!

Your problem is that earlier, at JVM startup, Java has already set the default timezone, it has called TimeZone.setDefault(...); using the original "user.timezone" property. Just changing the property afterwards with System.setProperty("user.timezone", "UTC") has in itself no effect.

That's why the normal way to set the default timezone at start time is: java -Duser.timezone=...

If you insist on setting the timezone programatically, you can, after changing the property, set the default timezone to null to force its recalculation:

  System.setProperty("user.timezone", "UTC");
  TimeZone.setDefault(null);

(from here ).

Or, simpler and cleaner, set it explicity:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

Be aware of potential issues if running under a SecurityManager .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM