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

时区偏移的java.time DateTimeFormatter模式

尤飞尘
2023-03-14

如果偏移量为4位(-05:00),我可以使用:yyyy-mm-dd-hh.mm.sss.sssssxxx,但这不适用于3位。

有什么想法吗?

共有1个答案

乜昆
2023-03-14

用大写字母X代替X,因此是xxx。不同之处在于,大X可以将输入字母“Z”识别为UTC-Offset+00:00,而小模式字母X不能识别。

建议的模式:

yyyy-MM-dd-HH.mm.ss.SSSSSSXXX

请注意以下jdk-bug:

String input = "2014-05-02-10.45.05.993280-5:00";
DateTimeFormatter f = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd-HH.mm.ss.SSSSSS")
        .parseLenient()
        .appendOffset("+HH:MM", "Z")
        .toFormatter();
System.out.println(f.parse(input, ZonedDateTime::from));

但它抛出了一个异常:

线程“main”java.time.format.dateTimeParseException中的异常:无法在索引26处解析文本'2014-05-02-10.45.05.993280-5:00',该索引位于java.time.format.dateTimeFormatter.parseresolved0(DateTimeFormatter.java:1947),位于java.time.format.dateTimeFormatter.parse(dateTimeFormatter.java:1849),位于helloworld.main(Helloworld.java:16),位于helloworld.main

因此,宽大的解析也无济于事。所以现在只剩下三个选择:

>

  • 使用bug报告者建议的变通方法:[...]解决方法是单独解析日期/时间,使用手工编码的偏移量解析器,并将LocalDateTime与手工解析的偏移量结合起来。不是一件容易的事情。

    尝试您自己专门的字符串预处理。如果您有一个固定的格式,那么您可以尝试在第26位插入零位数(如果总输入长度太小了一位数)。

    或者您可以使用外部库来完成此操作。如果您愿意添加额外的依赖项,我的库Time4J(V4.0)可以做到这一点。请参见此代码:

    String input = "2014-05-02-10.45.05.993280-5:00";
    ZonalDateTime zdt =
        ZonalDateTime.parse(
            input,
            Moment.localFormatter("yyyy-MM-dd-HH.mm.ss.SSSSSSXXX", PatternType.CLDR));
    System.out.println(zdt); // 2014-05-02T10:45:05,993280UTC-05:00
    ZonedDateTime result = zdt.toTemporalAccessor();
    

  •  类似资料:
    • 我使用的是“亚洲/曼谷”区域id。该偏移是从格林尼治时间UTC 07:00开始的。 但是当我做了下面的事情时,设置为“01/01/1900 7:00:00.000”时不是7:00 结果就是 周一一月一日07:00:00 ICT 1900 -402 周一一月一日06:00:00 ICT 1900 -420 我想知道偏移量是否在1900年1月1日早上7点左右发生了变化,所以我在维基百科上查了一下。ht

    • 一切都清楚一次是UTC中的日期:

    • 问题内容: 我需要以[+/-] hh:mm的格式保存手机的时区 我正在使用TimeZone类来处理此问题,但是我只能获得以下格式: 我宁愿不对结果进行子串化,是否可以设置任何键或选项标志来仅获取值,而不获取该时区的名称(GMT / CET / PST …)? 问题答案: 我需要以[+/-] hh:mm的格式保存手机的时区 不,你没有。仅靠偏移量是不够的,您需要存储整个时区名称/ id。例如,我住在

    • 我有一个格式为“2019-04-25T16:34:28-05:00”的字符串。我已经通过模式“yyyy-mm-dd't'hh:mm:ssz”通过joda-time解析了字符串。 它在DateTime中给出的输出是“2019-04-25t15:34:28.000-06:00”。

    • 问题内容: 我知道相反。给定一个时区,我可以通过以下代码片段获取时区偏移量: 我想知道如何从时区偏移量获取时区名称。 鉴于 (以毫秒为单位; +6.00偏移) 我想得到以下任何可能的时区名称的结果: 问题答案: 用

    • 问题内容: MySQL中有没有一种方法可以计算任何时区的偏移量?例如,要获取时区中的本地时间。我想做的是计算该时区的偏移量,并将该偏移量添加到GMT以获得本地时间。 问题答案: 如果要计算某个时区(例如,美国/温哥华)与UTC的时差,则可以按照以下步骤进行操作: 为此,您首先需要按照以下概述将时区信息加载到mysql中:http : //dev.mysql.com/doc/refman/5.0/e