【问题标题】:DateTimeParseException: fails on one host, works on another, same JDKDateTimeParseException:在一台主机上失败,在另一台主机上运行,​​相同的 JDK
【发布时间】:2019-11-20 10:49:35
【问题描述】:

我完全感到困惑。我在本地和生产主机上都使用 OpenJdk 11.0.3。一个解析日期,一个不解析。关于可能导致差异的任何想法?

编辑:最后提到的 hacky workaround

相同的JDK:

kesselc:~/openjdk-11.0.3+7/bin$ ./java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment 18.9 (build 11.0.3+7)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.3+7, mixed mode)

prodhost: # java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu218.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu218.04.1, mixed mode, sharing)

不同的结果:

kesselc:$ ~/openjdk-11.0.3+7/bin/java DateTest
2019-07-10T09:48-06:00[America/Denver]

prodhost: # java DateTest
Exception in thread "main" java.time.format.DateTimeParseException: Text '948 AM MDT Wed Jul 10 2019' could not be parsed: null
    at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2017)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1952)
    at java.base/java.time.ZonedDateTime.parse(ZonedDateTime.java:598)
    at DateTest.main(DateTest.java:13)
Caused by: java.lang.NullPointerException
    at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.prefixLength(DateTimeFormatterBuilder.java:4527)
    at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add0(DateTimeFormatterBuilder.java:4396)
    at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add(DateTimeFormatterBuilder.java:4391)
    at java.base/java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser.getTree(DateTimeFormatterBuilder.java:4138)
    at java.base/java.time.format.DateTimeFormatterBuilder$ZoneIdPrinterParser.parse(DateTimeFormatterBuilder.java:4249)
    at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.parse(DateTimeFormatterBuilder.java:2370)
    at java.base/java.time.format.DateTimeFormatter.parseUnresolved0(DateTimeFormatter.java:2107)
    at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2036)
    at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
    ... 2 more

这是我在两者上运行的简单测试类:

public class DateTest {
    private static final DateTimeFormatter hhmm_a_zzz_EEE_MMM_dd_yyyy = new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("hmm a zzz EEE MMM d yyyy")
            .toFormatter();

    public static void main(String[] args) {
        System.out.println(ZonedDateTime.parse("948 AM MDT Wed Jul 10 2019", hhmm_a_zzz_EEE_MMM_dd_yyyy));
    }
}

编辑:我的解决方案,在某种程度上。在这种情况下,我正在解析以美国为中心的 NOAA 预测。所以,我破解了我自己的 ZoneId.of("MDT") 以映射到此处指出的 17 个时区的偏移量:https://www.timetemperature.com/abbreviations/united_states_time_zone_abbreviations.shtml

我隐约感到肮脏和羞愧,但这个特定的日期解析器是特定于这个特定来源的,所以我会说它足够好。

我仍然不知道为什么这两个系统的行为不同,但现在问题无关紧要了。

这是两个系统上的System.getProperties 转储。

好(kesselc):

{sun.desktop=gnome, awt.toolkit=sun.awt.X11.XToolkit, java.specification.version=11, sun.cpu.isalist=, sun.jnu.encoding=UTF-8, java.class .path=., java.vm.vendor=Oracle Corporation, sun.arch.data.model=64, java.vendor.url=http://java.oracle.com/, user.timezone=, os.name=Linux, java.vm.specification .version=11, sun.java.launcher=SUN_STANDARD, user.country=US, sun.boot.library.path=/home/kesselc/.sdkman/candidates/java/11.0.2-open/lib, sun.java .command=DateTest, jdk.debug=release, sun.cpu.endian=little, user.home=/home/kesselc, user.language=en, java.specification.vendor=Oracle Corporation, java.version.date=2019 -01-15,java.home=/home/kesselc/.sdkman/candidates/java/11.0.2-open,file.separator=/,java.vm.compressedOopsMode=从零开始,line.separator= , java.specification.name=Java 平台 API 规范, java.vm.specification.vendor=Oracle Corporation, java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment, sun.management.compiler=HotSpot 64 位分层编译器, java. runtime.version=11.0.2+9, user.name=kesselc, path.separator=:, os.version=4.4.0-154-generic, java.runtime.name=OpenJDK Runtime Environment, file.encoding=UTF- 8、java.vm.name=OpenJDK 64-Bit Server VM, java.vendor.version=18.9, java.vendor.url.bug=http://bugreport.java.com/bugreport/, java.io.tmpdir=/tmp, java.version=11.0。 2、user.dir=/home/kesselc/Projects/flex/weather/out/production/classes,os.arch=amd64,java.vm.specification.name=Java虚拟机规范,java.awt.printerjob=sun。 print.PSPrinterJob, sun.os.patch.level=unknown, java.library.path=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib, java.vendor=Oracle公司,java.vm.info=混合模式,java.vm.version=11.0.2+9,sun.io.unicode.encoding=UnicodeLittle,java.class.version=55.0}

失败 (prodhost):

{awt.toolkit=sun.awt.X11.XToolkit, java.specification.version=11, sun.cpu.isalist=, sun.jnu.encoding=ANSI_X3.4-1968, java.class.path=. , java.vm.vendor=Oracle Corporation, sun.arch.data.model=64, java.vendor.url=http://java.oracle.com/, user.timezone=, os.name=Linux, java.vm.specification.version=11 , sun.java.launcher=SUN_STANDARD, user.country=US, sun.boot.library.path=/usr/lib/jvm/java-11-openjdk-amd64/lib, sun.java.command=DateTest, jdk。 debug=release, sun.cpu.endian=little, user.home=/root, user.language=en, java.specification.vendor=Oracle Corporation, java.version.date=2019-04-16, java.home= /usr/lib/jvm/java-11-openjdk-amd64, file.separator=/, java.vm.compressedOopsMode=32-bit, line.separator= , java.specification.name=Java 平台 API 规范, java.vm.specification.vendor=Oracle Corporation, java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment, sun.management.compiler=HotSpot 64 位分层编译器, java. runtime.version=11.0.3+7-Ubuntu-1ubuntu218.04.1, user.name=root, path.separator=:, os.version=4.4.0-1079-aws, java.runtime.name=OpenJDK Runtime Environment, file.encoding=ANSI_X3.4-1968,java.vm.name=OpenJDK 64 位服务器 VM,java.vendor.url.bug=http://bugreport.java.com/bugreport/,java.io.tmpdir=/tmp,java.version=11.0。 3、user.dir=/opt/ct/deploy、os.arch=amd64、java.vm.specification.name=Java虚拟机规范、java.awt.printerjob=sun.print.PSPrinterJob、sun.os.patch。级别=未知,java.library.path=/usr/java/packages/lib:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux- gnu:/usr/lib/jni:/lib:/usr/lib, java.vendor=Oracle Corporation, java.vm.info=混合模式, 共享, java.vm.version=11.0.3+7-Ubuntu-1ubuntu218 .04.1, sun.io.unicode.encoding=UnicodeLittle, java.class.version=55.0}

【问题讨论】:

  • 好问题,我的想法也到了那里:)。不,不同的时区(我:PDT,prod:UTC),但我认为这无关紧要,因为它在要解析的日期中有一个时区字段。
  • 会不会是语言环境妨碍了?
  • 告诉我们更多关于您的两个环境的信息。
  • 顺便说一下,这是日期时间字符串的可怕格式。 MDT 不是 real time zone。如果打算针对北美中部使用的区域,则实时区域将是America/DenverAmerica/Edmonton。如果可能,请告知此数据的发布者有关 ISO 8601 的信息。
  • 我无法在 Java 9.0.4 上重现您的确切堆栈跟踪。但是我相信语言环境问题是一个很好的猜测。 AMMDTWedJul都是特定于语言的,可以在英语语言环境中解析,而在其他地方通常无法解析。

标签: java date


【解决方案1】:

我之前也遇到过同样的问题,对我有用的是将.toFormatter() 更改为.toFormatter(Locale.US)。我不确定是什么导致了这个问题,它一定与机器的时区有关。看看这是否适合你。

【讨论】:

  • 这是个好主意,但没有运气,同样的问题。 ZoneId.SHORT_IDS 说旧的 3 字母格式没有得到维护,这是有充分理由的,所以我自己在寻找偏移量。我仍然对为什么两个系统上的运行方式不同感到困惑,但我将通过自己的 hack 查找来完全避免这个问题。
  • @ChrisKessel 这真的很奇怪,如果你找到答案,请告诉我。
  • 给它一个 +1...没有解决我的问题,但它让我走上了正确的道路(以美国为中心的区域解析),所以我想奖励答案。
【解决方案2】:

确实,这很神秘。 null 作为尝试生成错误的一部分似乎很奇怪。我无法复制您的问题,尝试了 2 个 Java 8 和 12 环境。

我有几点建议:

  • 在解析诸如日期名称或月份名称等文本时始终指定Locale
  • 在单独的方法中,将代码简化到绝对最低限度,以确保没有副作用。
  • 调用 System.getProperties() 转储有关 JVM 环境的信息。

代码:

package work.basil.example;

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;

public class App {
    public static void main ( String[] args ) {
        System.out.println ( "Hello World!" );
        App app = new App ();
        app.doIt ();
    }

    private void doIt ( ) {


        DateTimeFormatterBuilder builder =
                new DateTimeFormatterBuilder ()
                        .parseCaseInsensitive ()
                        .appendPattern ( "hmm a zzz EEE MMM d yyyy" );

        Locale locale = Locale.US;
        DateTimeFormatter f = builder.toFormatter ( locale );

        String input = "948 AM MDT Wed Jul 10 2019";
        ZonedDateTime zdt = ZonedDateTime.parse ( input , f );

        System.out.println ( "zdt.toString() = " + zdt );

        System.out.println ( System.getProperties () );

    }
}

我成功运行了:

  • 我自己的 Mac Mini (2018) 和 macOS Mojave 10.14.5 使用来自 AdoptOpenJDK 和 HotSpot 的 Java 12.0.1+12。
  • IdeOne.com 使用 HotSpot 从 Oracle JDK 运行 java.version=1.8.0_112。看到这个code run live
  • Ubuntu 18.04.1 LTS 和来自 AdoptOpenJDK.net 的 OpenJDK 11.0.3+7(在 Mac 上的 Parallels 虚拟机中运行)。
  • Ubuntu 18.04.2 LTS 和 Oracle JDK 11.0.3+12 来自 the Oracle site

所有的结果都一样。

zdt.toString() = 2019-07-10T09:48-06:00[美国/丹佛]

系统属性

苹果机

{awt.toolkit=sun.lwawt.macosx.LWCToolkit, java.specification.version=12, sun.jnu.encoding=UTF-8, java.class.path=/Users/basilbourque/IdeaProjects/Demo/target /classes:/Users/basilbourque/.m2/repository/org/threeten/threeten-extra/1.5.0/threeten-extra-1.5.0.jar, java.vm.vendor=AdoptOpenJDK, sun.arch.data.model =64, java.vendor.url=https://adoptopenjdk.net/, java.vm.specification.version=12, os.name=Mac OS X, sun.java.launcher=SUN_STANDARD, user.country=US, sun.boot.library .path=/Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home/lib, sun.java.command=work.basil.example.App, http.nonProxyHosts=local|.local|169.254/ 16|.169.254/16, jdk.debug=release, sun.cpu.endian=little, user.home=/Users/basilbourque, user.language=en, java.specification.vendor=Oracle Corporation, java .version.date=2019-04-16, java.home=/Library/Java/JavaVirtualMachines/adoptopenjdk-12.jdk/Contents/Home, file.separator=/, java.vm.compressedOopsMode=从零开始,line.separator = , java.vm.specification.vendor=Oracle Corporation, java.specification.name=Java 平台 API 规范, java.awt.graphicsenv=sun.awt.CGraphicsEnvironment, sun.management.compiler=HotSpot 64 位分层编译器, ftp。 nonProxyHosts=local|.local|169.254/16|.169.254/16, java.runtime.version=12.0.1+12, user.name=basilbourque, path.separator=:, os.version =10.14.5,java.runtime.name=OpenJDK 运行时环境,file.encoding=UTF-8,java.vm.name=OpenJDK 64 位服务器 VM,java.vendor.version=AdoptOpenJDK,java.vendor.url。 bug=https://github.com/AdoptOpenJDK/openjdk-build/issues, java.io.tmpdir=/var/folders/qk/grjjffnj7ml_r54rrb1c2pbw0000gn/T/, java.version=12.0.1, user.dir=/Users/basilbourque/IdeaProjects/Demo, os.arch=x86_64 , java.vm.specification.name=Java 虚拟机规范, java.library.path=/Users/basilbourque/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/ Library/Java/Extensions:/usr/lib/java:., java.vm.info=混合模式, 共享, java.vendor=AdoptOpenJDK, java.vm.v ersion=12.0.1+12, sun.io.unicode.encoding=UnicodeBig, socksNonProxyHosts=local|.local|169.254/16|.169.254/16, java.class.version=56.0}

IdeOne.com

{java.runtime.name=Java(TM) SE 运行时环境,sun.boot.library.path=/opt/jdk/jre/lib/amd64,java.vm.version=25.112-b15,java.vm .vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=:, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user .country=US, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=unknown, java.vm.specification.name=Java 虚拟机规范, user.dir=/home/uXdFYs, java.runtime.version =1.8.0_112-b15, java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment, java.endorsed.dirs=/opt/jdk/jre/lib/endorsed, os.arch=amd64, java.io.tmpdir=/tmp , 行分隔符= , java.vm.specification.vendor=Oracle Corporation, os.name=Linux, sun.jnu.encoding=ANSI_X3.4-1968, java.library.path=/usr/java/packages/lib/amd64:/usr/ lib64:/lib64:/lib:/usr/lib, java.specification.name=Java 平台 API 规范, java.class.version=52.0, sun.management.compiler=HotSpot 64 位分层编译器, os.version=3.16 .0-4-amd64、user.home=?、user.timezone=、java.awt.printerjob=sun.print.PSPrinterJob、file.encoding=UTF-8、java.specification.version=1.8、java.class。 path=tested.zip, user.name=?, java.vm.specification.version=1.8, sun.java.command=tested.zip, java.home=/opt/jdk/jre, sun.arch.data.model =64, user.language=en, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.X11.XToolkit, java.vm.info=混合模式, java.version=1.8.0_112, java.ext .dirs=/opt/jdk/lib, sun.boot.class.path=/opt/jdk/jre/lib/resources.jar:/opt/jdk/jre/lib/rt.jar:/opt/jdk/jre /lib/sunrsasign.jar:/opt/jdk/jre/lib/jsse.jar:/opt/jdk/jre/lib/jce.jar:/opt/jdk/jre/lib/charsets.jar:/opt/jdk /jre/ lib/jfr.jar:/opt/jdk/jre/classes, java.vendor=Oracle Corporation, file.separator=/, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.cpu.isalist=}

【讨论】:

  • 如果您想查看,我将 System.getProperties() 转储添加到我的原始帖子中。除了编码之外,快速观察并没有显示任何明显的东西(这次我在 11.0.2 本地而不是 11.0.3 上运行它,但我认为这并不重要)。
  • @ChrisKessel 仅供参考,我运行了第三个场景,更接近您的prodhost:Ubuntu 18.04.1 LTS。像我的其他两个场景一样成功。也许你可以复制我在我的答案中发布的整个类文件,然后在你的prodhost 上运行。您甚至不需要使用 Java 11 进行编译,只需运行 java App.java 即可自动编译并执行。
  • 我剪切/粘贴您的程序并运行它,结果相同。 # java App.java 你好,世界!线程“主”java.time.format.DateTimeParseException 中的异常:无法解析文本“948 AM MDT Wed Jul 10 2019”:null
  • @ChrisKessel 这真的让我很烦。我在您的 Java 属性转储中注意到的唯一不同之处是 (a) ASCII 文件编码,以及 (b) Oracle JDK 而不是 OpenJDK。文件编码只是我相信的默认值,所以没关系。 Oracle JDK 应该无关紧要,因为它正在与 OpenJDK 融合。但到底是什么,也许我应该尝试一下。所以我今天在我的 Mac 上尝试了另一个虚拟机。没问题,我的示例代码运行了。但是出现了另一个区别:我注意到我的 Ubuntu 自动更新为 18.0.2 而不是 .1,而 Oracle JDK 11.0.3 现在是 +12 而不是 +7
【解决方案3】:

我一直在查看DateTimeFormatterBuilder 的源代码,但我不确定,但在我看来,您的NullPointerException 的一个可能原因是某些语言环境数据中的空时区缩写。这可能导致DateTimeFormatterBuilder.ZoneTextPrinterParser.getTree() 将空值传递给DateTimeFormatterBuilder.PrefixTree.add(),而DateTimeFormatterBuilder.PrefixTree.add() 又不期望空值。如果是这样,则不同的行为可能是由不同时区和不同语言环境的组合引起的。请注意,时区和语言环境是独立的。

编辑:提问者报告说我的建议不能解决这个特定问题。我让它保持不变,因为我认为为解析时区缩写指定首选时区的可能性可能对其他人有所帮助。

我没有重现您的异常,因此无法给出确定的修复方法,但我建议您尝试:

    Set<ZoneId> preferredZones = Set.of(ZoneId.of("America/Goose_Bay"),
            ZoneId.of("America/Moncton"), ZoneId.of("America/New_York"),
            ZoneId.of("America/Chicago"), ZoneId.of("America/Denver"),
            ZoneId.of("America/Los_Angeles"), ZoneId.of("America/Anchorage"),
            ZoneId.of("Pacific/Honolulu"), ZoneId.of("America/Adak"),
            ZoneId.of("Pacific/Pago_Pago"), ZoneId.of("Pacific/Guam"));
    DateTimeFormatter hhmm_a_zzz_EEE_MMM_dd_yyyy = new DateTimeFormatterBuilder()
            .parseCaseInsensitive()
            .appendPattern("hmm a ")
            .appendZoneText(TextStyle.SHORT, preferredZones)
            .appendPattern(" EEE MMM d yyyy")
            .toFormatter(Locale.US);

已选择首选区域以匹配您链接到的 17 个缩写:

AST        America/Goose_Bay, America/Moncton
EST EDT    America/New_York
CST CDT    America/Chicago
MST MDT    America/Denver
PST PDT    America/Los_Angeles
AKST AKDT  America/Anchorage
HST        Pacific/Honolulu
HAST HADT  America/Adak
SST SDT    Pacific/Pago_Pago
CHST       Pacific/Guam

您可能想检查我的映射是否正确。

另外,正如其他人已经建议的那样,我为格式化程序指定了Locale.US

【讨论】:

  • 感谢您所做的所有工作,但仍然遇到同样的问题。
  • 感谢您尝试并至少满足了我的一些好奇心。很高兴您找到了适合这种特殊情况的方法。
【解决方案4】:

在 CentOS 上,只有发行版中打包的 jvm 11 和 14 会失败。 它们被标识为:

openjdk version "11.0.7" 2020-04-14 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.7+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.7+10-LTS, mixed mode, sharing)

或:

openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment 20.3 (build 14.0.1+7)
OpenJDK 64-Bit Server VM 20.3 (build 14.0.1+7, mixed mode, sharing)

从 AdoptOpenJDK 下载,一切正常:

openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.1+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.1+7, mixed mode, sharing)

openjdk version "11.0.8" 2020-07-14
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.8+10)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.8+10, mixed mode)

我的 Mac 上还有几乎所有 JVM 自 1.8 以来的版本。他们都很好。

测试的格式是:

private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM d HH:mm:ss zzz", Locale.ENGLISH);

(编辑) 代码接近所示示例:

import java.time.*;
import java.time.format.*;
import java.util.Locale;

public class DateTest {
    private static final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM d HH:mm:ss zzz", Locale.ENGLISH);

    public static void main(String[] args) {
        System.out.println(dtf.parse("Jul 15 11:20:01 CEST"));
    }
}

还有一个带有 JVM 14 的堆栈:

/usr/lib/jvm/jre-14/bin/java -XX:+ShowCodeDetailsInExceptionMessages -cp . DateTest 2>&1 | sort -u | less
        ... 1 more
        at DateTest.main(DateTest.java:9)
        at java.base/java.time.format.DateTimeFormatter.createError(DateTimeFormatter.java:2021)
        at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1878)
        at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1882)
        at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2040)
        at java.base/java.time.format.DateTimeFormatter.parseUnresolved0(DateTimeFormatter.java:2111)
        at java.base/java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.parse(DateTimeFormatterBuilder.java:2372)
        at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add(DateTimeFormatterBuilder.java:4402)
        at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.add0(DateTimeFormatterBuilder.java:4407)
        at java.base/java.time.format.DateTimeFormatterBuilder$PrefixTree.prefixLength(DateTimeFormatterBuilder.java:4538)
        at java.base/java.time.format.DateTimeFormatterBuilder$ZoneIdPrinterParser.parse(DateTimeFormatterBuilder.java:4260)
        at java.base/java.time.format.DateTimeFormatterBuilder$ZoneTextPrinterParser.getTree(DateTimeFormatterBuilder.java:4149)
Caused by: java.lang.NullPointerException: Cannot invoke "String.length()" because "k" is null
Exception in thread "main" java.time.format.DateTimeParseException: Text 'Jul 15 11:20:01 CEST' could not be parsed: Cannot invoke "String.length()" because "k" is null

【讨论】:

  • 你能发布你所有的测试代码,以及完整的错误吗?可以帮助任何关心这个问题的人。
【解决方案5】:

这终于是一个已知问题,在 Fedora 中解决了,在 Redhat 中还没有:

https://bugzilla.redhat.com/show_bug.cgi?id=1837376 https://bugzilla.redhat.com/show_bug.cgi?id=1838229.

问题是 /usr/share/javazi-1.8/tzdb.dat 有问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多