当前位置: 首页 > 面试题库 >

JDK6中的TimeZone.setDefault更改

赖明煦
2023-03-14
问题内容

我只是注意到,与JDK5相比,JDK 6设置默认TimeZone的方法有所不同。

以前,新的默认值将存储在线程局部变量中。使用JDK6(我刚刚查看过1.6.0.18),实现已更改,因此,如果用户可以写入“
user.timezone”属性,或者如果未安装SecurityManager,则时区将在VM范围内更改!否则,将发生线程局部更改。

我错了吗?这似乎是一个巨大的变化,我在网上找不到任何有关它的信息。

这是JDK6代码:

 private static boolean hasPermission() {
  boolean hasPermission = true;
  SecurityManager sm = System.getSecurityManager();
  if (sm != null) {
   try {
    sm.checkPermission(new PropertyPermission("user.timezone", "write"));
   } catch (SecurityException e) {
    hasPermission = false;
   }
  }
  return hasPermission;
 }

 /**
  * Sets the <code>TimeZone</code> that is
  * returned by the <code>getDefault</code> method.  If <code>zone</code>
  * is null, reset the default to the value it had originally when the
  * VM first started.
  * @param zone the new default time zone
  * @see #getDefault
  */
 public static void setDefault(TimeZone zone)
 {
  if (hasPermission()) {
   synchronized (TimeZone.class) {
    defaultTimeZone = zone;
    defaultZoneTL.set(null);
   }
  } else {
   defaultZoneTL.set(zone);
  }
 }

而之前(在JDK5中)只是:

 /**
  * Sets the <code>TimeZone</code> that is
  * returned by the <code>getDefault</code> method.  If <code>zone</code>
  * is null, reset the default to the value it had originally when the
  * VM first started.
  * @param zone the new default time zone
  * @see #getDefault
  */
 public static synchronized void setDefault(TimeZone zone)
 {
  defaultZoneTL.set(zone);
 }

问题答案:

搜索错误数据库实际上是一个好主意:)

http://bugs.sun.com/view_bug.do?bug_id=6352812

并且(文档):

http://bugs.sun.com/view_bug.do?bug_id=6181786

简介:JDK 1.5是该规则的一个例外,对于JDK 1.6,一切恢复为“正常”,根据文档,这是时区更改在VM范围内。



 类似资料:
  • 我在JDK5中使用以下API导入sun.text.normalizer: 公共静态字符串分解(String str、boolean compat、int选项) 公共静态final int getClass(int ch) 公共静态字符串规范化(字符串str、Mode Mode、int选项)

  • 我有一个问题,经过多次尝试后不知道如何解决它。我JavaJDK 6的 /Maven项目并在Eclipse Luna中安装了Maven 3.2.5现在我正在尝试运行清洁安装命令来创建ZIP包,但收到以下错误消息: 无法在项目ABC上执行目标org.apache.maven.plugins:maven编译器插件:3.1:compile(默认编译):编译错误:无效目标版本:1.7 以前是否有人遇到过此问

  • 在将OpenSAML从1.1升级到2.6.1(需要xerces-impl依赖项)之后,启动时会出现以下堆栈: xerces-impl重新定义了一些jre类,并附带了重新定义一些jre接口的XML-API。DataType.DataTypeFactoryImpl来自xerces-impl。 我读过用Java/Maven处理“Xerces地狱”?并尝试排除XML-API,但xerces-impl抛出N

  • 问题内容: 关于JDK 5的这个问题说,[DK 5没有提供任何实现,但是JDK 6应该有一个实现。 据我所知,该类未随JDK提供,并且无法在其中找到任何其他类似的类。 那么,JDK6的情况如何? 我知道有许多类似Commons和JBoss的实现,但是我们有一个严格的第三方lib策略,因此我试图避免重新发明轮子。 问题答案: 不,在Java 5和Java 6之间情况没有改变。 不幸的是,Java S

  • 问题内容: 在IE 11中,ToLocaleDateString()获得了有趣的结果。返回的字符串在浏览器中看起来不错,例如“ 1/28/2014 11:00:46 AM”,但是如果我将该值复制并粘贴到纯文本编辑器中,它看起来像这样:“?1?/? 28?/?2014?11?:?00?:?46??AM”。 有趣的是,如果我将文本粘贴到Microsoft产品中,看起来还不错…问题是,如果您尝试以编程方

  • 我正在尝试更改geopandas数据帧的CRS。目前的CRS是: 当我尝试dfTrans.to_crs('epsg:4326')时,我得到以下错误: 对于pyproj中的一个简单命令,pyproj.CRS.from_epsg(4326),我得到了相同的错误: 我不知道发生了什么,但似乎有一个底层函数调用一个不存在的列。有没有办法解决这个问题?