栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Joda时区与JDK的时区不同

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Joda时区与JDK的时区不同

当您说“从操作系统和本地系统读取默认值”时,没有一个明确定义的地方可以读取此默认值。甚至API文档本身也说

获取

TimeZone
此主机的默认值。默认值的来源
TimeZone
可能会因实现方式而异。

因此,简单的答案是Joda和您的JVM从不同的信息源推断默认时区。需要记住的一点是, 默认值是一个guess ,而不是JVM绝对可以访问的值。

对于Linux上的Sun的1.5.0_06 JVM,使用以下顺序:

  1. 期待环境变量TZ
  2. 查找文件/ etc / sysconfig / clock并尝试找到“ ZONE”条目。
  3. 递归比较/ etc / localtime中的内容与/ usr / share / zoneinfo中每个文件的内容。当内容匹配时,它将返回从/ usr / share / zoneinfo引用的路径和文件名。

Joda 1.6.2使用:

  1. 系统属性
    user.timezone
  2. 如果以上
    null
    不是有效标识符,
    TimeZone
    则使用JDK的默认值。
  3. 如果失败,
    UTC
    则使用。

因此, 如果
您具有上述版本的JDK和Joda,建议

user.timezone
您在您的环境中设置该属性。但是,其他版本可能会使用其他算法来获取默认值。

编辑:在Sun的JDK
1.6.0_22中,默认搜索

user.timezone
也会首先检查该属性,如果找不到该
user.country
属性,则它将查找该属性以获取某个国家的默认值。如果两者均未设置,
GMT
则使用默认值。因此,您观察到的结果可能会随JVM版本而改变。


编辑2:如果您同时拥有两个源(实际上两个源均可用),则只需对其进行跟踪即可!逐步执行Joda调用,以查看它是否确实遵从

java.util.TimeZone.getDefault()
,并查看返回的值是什么。然后直接调用JDK方法,然后看得到什么。

查看JDK源代码,似乎默认时区是通过可继承线程本地访问的。因此,如果有人在某处打电话

TimeZone.setDefault()
,则可能在其他线程中可见,也可能看不见,这取决于他们是否已经查看了该版本。如果您从调试调用中获得明显的异常结果,则很可能是由于
不同的线程可能具有不同的默认TimeZones造成的



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/431063.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号