【问题标题】:Joda DateTimeFormatter for a string in the form 2020-05-16 01:00+0200Joda DateTimeFormatter 用于格式为 2020-05-16 01:00+0200 的字符串
【发布时间】:2020-09-04 04:15:37
【问题描述】:

我收到一个日期格式为"2020-05-16 01:00+0200" 的字符串。我需要将其解析为 DateTime 对象,但我找不到正确的模式,即DateTimeFormat.forPattern("yyyy-MM-dd HH:mm????"); 如何从字符串中包含“+0200”? 另外,有没有办法从 DateTime 中提取偏移量?

谢谢你。

【问题讨论】:

  • 更正:要解析的日期字符串 = "2020-05-16 01:00+0200" DateTimeFormat.forPattern("yyyy-MM-dd HH:mm????");如何包含“+0200”
  • 欢迎指正。下次请edit你的问题而不是发表评论(这次我为你做了)。

标签: datetime parsing jodatime datetime-parsing


【解决方案1】:
    String dateStringToParse = "2020-05-16 01:00+0200";
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mmZ")
            .withOffsetParsed();

    DateTime dt = DateTime.parse(dateStringToParse, formatter);

    System.out.println(dt);

输出是:

2020-05-16T01:00:00.000+02:00

Joda-Time 的标准行为是解析到您的默认时区。对withOffsetParsed() 的调用确保字符串的偏移量保留在已解析的DateTime 中。

DateTimeFormat 的文档说关于模式字母Z

 Symbol  Meaning                      Presentation  Examples
 ------  -------                      ------------  -------
 Z       time zone offset/id          zone          -0800; -08:00; America/Los_Angeles

还有:

Zone: 'Z' 输出不带冒号的偏移量,……

提取偏移量:

    DateTimeZone z = dt.getZone();
    System.out.println(z);

+02:00

链接: DateTimeFormat documentation

【讨论】:

  • 谢谢你的回答,不过 System.out.println("z = " + z);给出 "z = Europe/Berlin" ,而不是 "+0200"
  • 我无法重现那个位,我得到了我报告的+02:00。你确定你记得.withOffsetParsed() 位吗?
  • 你能告诉我你是如何获得z = Europe/Berlin的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
相关资源
最近更新 更多