当前位置: 首页 > 知识库问答 >
问题:

旧的日期格式与Java 8 ZonedDateTime API不兼容

游皓
2023-03-14

日期格式与Javascript日期对象格式相同,例如-

2017年5月25日(星期四)10:00:00 GMT+1200(新西兰标准时间)

我以前用的是下面的格式-

public static final String DATE_FORMAT = "EEE MMM dd yyyy hh:mm:ss 'GMT'Z '('zzzz')'";

public static void main(String[] args) throws ParseException {
    String sDate = "Thu May 25 2017 10:00:00 GMT+1200 (New Zealand Standard Time)";
    parseDate(sDate);
}

private static void parseDate(String sDate) throws ParseException {

    // works
    DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
    Date oldDate = dateFormat.parse(sDate);

    //FIXME: can't parse?!
    ZonedDateTime newDate = ZonedDateTime.parse(
           sDate, DateTimeFormatter.ofPattern(DATE_FORMAT)); // <- this is the line 25!
}

我当然可以修改格式化程序

EEE MMM dd yyyy HH:MM:SS'GMT'Z'('ZZZZ')'

共有1个答案

咸高谊
2023-03-14

你的格式字符串似乎一直有一个错误。小写hh表示上午或下午内的小时,范围在1到12之间。由于字符串中没有AM/PM,我怀疑这从来不是您想要的,我想知道这个错误怎么会没有被注意到。

大写hh表示一天中的小时,从0到23:

public static final String DATE_FORMAT = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z '('zzzz')'";

有了这个变化,新旧的解析方式都可以在我的计算机上运行。

Thu May 25 00:00:00 CEST 2017
2017-05-25T10:00+12:00[Pacific/Auckland]
 类似资料:
  • 我想用特定的格式序列化POJO的某些日历字段。 我将添加一个格式为字符串的字段,因为它实际上是以24小时为单位表示一天,而不是一个特定的时间瞬间。但当我添加带有注释的新字段时: 我希望得到这样的JSON: 相反,我遇到了以下例外情况:

  • 问题内容: 我正在学习Go,并且正在尝试对日期时间进行JSON解组。 我有一个用C语言编写的程序生成的JSON,我正在输出我认为有效的ISO8601 / RFC3339时区偏移量。我正在使用以下格式字符串: (请注意,本机不支持,我有一个包装器将其替换为纳秒级)。 然后,将产生以下结果: 但是在Go中取消编组此功能将无效:https : //play.golang.org/p/vzOXbzAwdW

  • 我有两个字符串格式的日期:说,格式为。比较日期1和日期2的相等性的最佳方法是什么?我不关心时间,只关心日、年、月。我应该将它们转换为即时并进行比较吗?

  • 问题内容: 我需要将日期格式化为特定的字符串。 我使用class使用“ ” 模式格式化日期,它将当前日期返回为 “ ”,但我需要为 “ ”。 下面是使用的编码, 输出 :格式化的字符串: 我需要的格式是在gmt时间之间添加冒号。 因为我正在使用Google日历插入事件,所以它仅接受我提到的必需格式。 问题答案: 您可以改用Joda Time。它具有可以满足您需求的format属性。 链接 最大优点

  • 对于我的一个客户,我正在处理一些非常古老的日期,例如: 0572-06-17 1000-06-17 当我将字符串转换为日期时,它有一个奇怪的时区。例子: 你可以看到时区是00:17。为什么会出现这个奇怪的时区?

  • 设定年月日的排列顺序。