【问题标题】:Parse unknown DateTime string with Time Zone identifier [duplicate]使用时区标识符解析未知的 DateTime 字符串 [重复]
【发布时间】:2021-08-06 21:05:39
【问题描述】:

这个字符串20190612070000.000[-4:EDT]如何解析成ZonedDateTime

我已经尝试过这种模式和其他一些模式,但到目前为止没有任何效果:

String dateString = "20190612070000.000[-4:EDT]";

ZonedDateTime dateTime = ZonedDateTime.parse(dateString, ofPattern("yyyyMMddHHmmss.S[x:z]"));

【问题讨论】:

    标签: java datetime time


    【解决方案1】:

    没有与您的日期时间字符串匹配的模式的 OOTB(开箱即用)DateTimeFormatter。您可以使用DateTimeFormatterBuilder 定义一个。

    演示:

    import java.time.ZonedDateTime;
    import java.time.format.DateTimeFormatter;
    import java.time.format.DateTimeFormatterBuilder;
    import java.time.format.TextStyle;
    import java.util.Locale;
    
    public class Main {
        public static void main(String[] args) {
            DateTimeFormatter dtf = new DateTimeFormatterBuilder()
                                    .appendPattern("uuuuMMddHHmmss.SSS")
                                    .appendLiteral('[')                                
                                    .appendOffset("+H", "")
                                    .appendLiteral(':')
                                    .appendZoneText(TextStyle.SHORT)
                                    .appendLiteral(']')
                                    .toFormatter(Locale.ENGLISH);
                                    
            String strDateTime = "20190612070000.000[-4:EDT]";
            
            ZonedDateTime zdt = ZonedDateTime.parse(strDateTime, dtf);
            System.out.println(zdt);
        }
    }
    

    输出:

    2019-06-12T07:00-04:00[America/New_York]
    

    Trail: Date Time了解更多关于java.timemodern date-time API*的信息。


    * 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

    【讨论】:

    • 嗨 Arvind,+H 是什么意思,我得到 Invalid zone offset pattern: +H Java8
    • @YCF_L - +H 用于区域偏移时间。请检查此online demo
    • 我认为这应该适用于 Java9+ 而不是 Java8 检查Ole V.V.的评论
    猜你喜欢
    • 2018-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多