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 withSystem.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:(from here).
Or, simpler and cleaner, assign it directly with
TimeZone.setDefault(...);
.