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

从字符串分析带有时区的日期

何德寿
2023-03-14

(我想)快速提问。如何将“2018-07-22+3:00”解析为offsetdatetime(将时间设置为0:0:0.0)?

DateTimeFormatter formatter =cDateTimeFormatter.ofPattern("yyyy-MM-dd xxx");
OffsetDateTime dt = OffsetDateTime.parse("2007-07-21 +00:00", formatter);

java.time.format.DateTimeParseException:无法分析文本“2007-07-21+00:00”:无法从TemporalAccessor获取OffsetDateTime:{offsetseconds=0},ISO解析为类型java.time.format.Parsed的2007-07-21

共有1个答案

景信瑞
2023-03-14

offsetdatetime需要一个每天的时间,但您的格式字符串没有提供这一点,因此您需要告诉datetimeformatter将默认的每天的时间设置为午夜。

此外,偏移量+3:00无效,因为hour必须是2位数,这意味着您需要首先解决这个问题。

这两者都有作用:

public static OffsetDateTime parse(String text) {
    // Fix 1-digit offset hour
    String s = text.replaceFirst("( [+-])(\\d:\\d\\d)$", "$10$2");

    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
            .appendPattern("uuuu-MM-dd xxx")
            .parseDefaulting(ChronoField.HOUR_OF_DAY, 0)
            .toFormatter();
    return OffsetDateTime.parse(s, formatter);
}

测试

System.out.println(parse("2018-07-22 +3:00"));
System.out.println(parse("2018-07-22 +03:00"));
System.out.println(parse("2007-07-21 +00:00"));

输出

2018-07-22T00:00+03:00
2018-07-22T00:00+03:00
2007-07-21T00:00Z
 类似资料:
  • 我想从格式为“2021-12-10T18:49:00-05:00”的字符串中解析带有时区的日期。我尝试使用“date('Y-m-dh:I:s',strotime($myDate))”进行解析。但这是第二天的返回日期。非常感谢您的帮助。

  • 我正在尝试在中解析这些日期,然后获取表示形式。 我阅读了这个类似的答案,并创建了一个方法来解析上述日期并返回具有所需格式的: 然而,没有一个图案是匹配的。我这里缺少什么? 更新:在这两个日期中,我都收到了字符的异常。

  • 问题内容: 如何将类似“ 01-Jan-1995”的字符串解析为Python对象? 问题答案: 总体来说,您可以使用或模块中的函数来分析日期和时间字符串。您的示例可以解析为: 请注意,解析月份的名称是与语言环境相关的。下表显示了用于解析日期和时间的各种格式的指令。

  • 我有一个这种格式的字符串:,我想解析它,这样我就可以说,例如,它是星期几。但是我正在努力应对时区偏移。如果我做了,那么我最终会得到这样的东西: 它对时区做了一些事情,但是如果我想显示时区信息,我该如何处理? 如果有问题,我之前已经使用设置了默认时区。 更新:如果字符串具有正时区,例如,则输出的最后一部分是:

  • 问题内容: 我正在尝试像在Python中一样解析时间戳字符串,但是在寻找一种可以处理缩写时区的解决方案时遇到了麻烦。 我正在使用的功能,但无法解析时区。是否有捷径可寻? 问题答案: 这可能不起作用,因为这些缩写不是唯一的。有关详情,请参见此页面。如果使用一组已知的输入,则可能只需要自己手动处理即可。

  • 我有一个本地日期时间的字符串表示和一个Java时区。 我正在尝试以 MM/dd/yyyy HH:mm:ssZ 格式获取输出,但我无法弄清楚如何使用正确的日期时间和时区创建日历或 JodaTime 对象。如何将时区转换为可以通过简单日期格式“Z”或“z”解析的值? 和 返回 这是 。 是创建日历或Joda日期时间并通过解析字符串“08/14/2014 15:00:00”来设置各个年/月/日/小时/分