JDK-8074023: Clock.system(ZoneId) could be optimized to always return the same clock for a given zone

Roger Riggs Roger.Riggs at Oracle.com
Thu Apr 23 21:28:26 UTC 2015


Hi Peter,

Setting the user.timezone property doesn't reset the value returned from 
getDefaultRef().
You can see the new value through java.util.TimeZone but not through 
java.time.ZoneId.

Its a bad idea to allow the default timezone change and in java.time it 
was purposefully
handled as an initialize once value.

Roger


On 4/23/2015 5:20 PM, Peter Levart wrote:
>
>
> On 04/23/2015 10:33 PM, Roger Riggs wrote:
>> Hi Peter,
>>
>> The defaultTimeZone is cached in java.util.TimeZone the first time it 
>> is referenced
>> and is not updated after that.  See java.util.TimeZone.getDefaultRef().
>>
>> Regards, Roger
>>
>
> But any code (with enough privilege) can update it:
>
> abstract public class TimeZone .... {
>
>     public static void setDefault(TimeZone zone)
>     {
>         SecurityManager sm = System.getSecurityManager();
>         if (sm != null) {
>             sm.checkPermission(new PropertyPermission
>                                ("user.timezone", "write"));
>         }
>         defaultTimeZone = zone;
>     }
>
>
>
> Peter
>
>>
>> On 4/23/2015 4:11 PM, Peter Levart wrote:
>>>
>>>
>>> On 04/23/2015 09:53 PM, nadeesh tv wrote:
>>>> Hi all,
>>>>
>>>> Please review this minor change which  optimized 
>>>> Clock.systemDefaultZone() and Clock.system(ZoneId)  to avoid 
>>>> creating new instance of Clock.SystemClock every time they are called.
>>>>
>>>> Bug ID : https://bugs.openjdk.java.net/browse/JDK-8074023
>>>>
>>>> Webrev : http://cr.openjdk.java.net/~rriggs/nadeesh-tv-8074023/
>>>>
>>>
>>> Hi Nadeesh,
>>>
>>> What happens if ZondeId.systemDefault() changes 
>>> (TimeZone.setDefault()) *after* Clock class has already been 
>>> initialized?
>>>
>>> Regards, Peter
>>>
>>
>




More information about the core-libs-dev mailing list