java - 解析格式化日期在 Java 11 中给出 null,但在 Java 8 中给出正确的输出

标签 java datetime-format java-11

这是在 Java 8 中正确运行并打印所需输出的代码。

import java.util.*;
import java.text.DateFormat;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;

public class Java11 {

    public static void main(String args[]) throws Exception {

        // Hong kong timezone ID.
        String hongkongTimezone = "Asia/Hong_Kong";
        String dateFormat = "MMM dd, yyyy HH:mm:SS";

        //Current date of local time zone.
        Date date = new Date();

        // Current date of HongKong.
        Date currentDateHongkong = null;

        DateFormat hongkongDateFromat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.US);

        // Set hongkong time zone ID.
        hongkongDateFromat.setTimeZone(TimeZone.getTimeZone(hongkongTimezone));
        String stringFormatDate = hongkongDateFromat.format(date);

        currentDateHongkong = new SimpleDateFormat(dateFormat).parse(stringFormatDate, new ParsePosition(0));

        System.out.println(currentDateHongkong);
    }
}

在 Java 8 上执行时输出如下

Mon Oct 22 06:28:00 IST 2018

但是当我在 Java 11 上执行相同的代码时,我得到 null

最佳答案

您正在使用不同的格式模式进行格式化和稍后的解析。

尝试

currentDateHongkong = hongkongDateFromat.parse(stringFormatDate, new ParsePosition(0));

而不是

currentDateHongkong = new SimpleDateFormat(dateFormat).parse(stringFormatDate, new ParsePosition(0));

关于java - 解析格式化日期在 Java 11 中给出 null,但在 Java 8 中给出正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927264/

相关文章:

java - 尝试资源失败但尝试有效

java - 如何使用 jdk 11 读取堆状态?

java - Java 9-19 中生成自签名证书的 API 是什么?

java - 需要有关为小型 Java 程序创建关闭按钮的建议

java - 如何从选项卡 Pane 中删除选项卡

python - 日期时间的国际化

java - 如何获取当前本地时间的 UTC 转换后的 Java 时间戳?

java - JTable异常删除行

java - 什么是 Apache Camel bean?

java - 以 "+0100"(例如)格式获取时区