You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Joda-time 2.9.9更新tzdata遇FileNotFoundException问题求助

解决方案:不升级Joda-Time 2.9.9更新tzdata并解决启动异常

问题根源

报错核心是Joda-Time的ZoneInfoProvider读取时区数据时,要么找不到ZoneInfoMap文件,要么误将目录当作文件读取。这是因为手动解压tzdata包后的目录结构不符合Joda-Time预期,或者时区数据路径配置错误导致的。

具体操作步骤

1. 正确处理tzdata2023c包

  • 解压下载的tzdata2023c.tar.gz,取出其中的zoneinfo目录(这是IANA时区数据的标准目录,包含ZoneInfoMap和所有时区文件)
  • 将zoneinfo目录直接重命名为tzdata2023c,放到/tmp/tz/路径下,确保最终路径为/tmp/tz/tzdata2023c/ZoneInfoMap(此处ZoneInfoMap是文件而非目录)

2. 强制指定Joda-Time时区数据路径

Joda-Time 2.9.9支持通过系统属性指定时区数据加载路径,避免默认路径错误:

  • 在Weblogic启动参数中添加:
    -Dorg.joda.time.tz.DefaultZoneInfoProvider=/tmp/tz/tzdata2023c
    
    该参数会让Joda-Time强制从指定目录加载时区数据,覆盖默认查找逻辑。

3. 检查文件权限与旧数据清理

  • 确保Weblogic运行用户对/tmp/tz/tzdata2023c目录及内部文件有读权限
  • 删除/tmp/tz/下的旧时区数据目录(如tzdata2020a),避免Joda-Time误加载旧数据

4. 生产环境持久化方案(替代临时目录)

如果/tmp目录重启后会被清理,建议将时区数据打包成jar包持久化:

  • 将重命名后的tzdata2023c目录打包为joda-tzdata-2023c.jar,确保jar包根目录下直接是ZoneInfoMap和时区文件
  • 将该jar包放入Weblogic的domain/lib目录,或添加到应用类路径中。Joda-Time会自动扫描类路径中的时区数据jar包,优先使用最新版本

验证方法

启动Weblogic后,可通过以下代码验证时区数据是否更新:

import org.joda.time.DateTimeZone;
import org.joda.time.LocalDateTime;

public class TzValidation {
    public static void main(String[] args) {
        DateTimeZone shanghaiZone = DateTimeZone.forID("Asia/Shanghai");
        LocalDateTime currentTime = LocalDateTime.now(shanghaiZone);
        System.out.println("时区ID: " + shanghaiZone.getID());
        System.out.println("当前时间: " + currentTime);
        // 可进一步验证夏令时切换规则等更新内容
    }
}

内容的提问来源于stack exchange,提问作者pancho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 17:02:25