Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8 如何在java中获取时区偏移值_Java 8_Timezone_Jodatime_Simpledateformat_Zoneddatetime - Fatal编程技术网

Java 8 如何在java中获取时区偏移值

Java 8 如何在java中获取时区偏移值,java-8,timezone,jodatime,simpledateformat,zoneddatetime,Java 8,Timezone,Jodatime,Simpledateformat,Zoneddatetime,我有一个来自设备的日期,我想用Java执行以下操作: 我想将此日期“2021-05-27T18:47:07+0530”解析为yyyy-mm-dd HH:mm:SS 获取日期的偏移值,以便我可以获取时区偏移为+05:30或它来自的任何时区 对于第一种方法,我已经这样做了,看起来很有效,但是任何更好的更小的方法也会很方便: String date = "2021-05-27T18:47:07+0530"; String inputPattern

我有一个来自设备的日期,我想用Java执行以下操作:

  • 我想将此日期“2021-05-27T18:47:07+0530”解析为yyyy-mm-dd HH:mm:SS
  • 获取日期的偏移值,以便我可以获取时区偏移为+05:30或它来自的任何时区
  • 对于第一种方法,我已经这样做了,看起来很有效,但是任何更好的更小的方法也会很方便:

    
            String date = "2021-05-27T18:47:07+0530";
            String inputPattern = "yyyy-MM-dd'T'HH:mm:ss+SSSS";
            String outputPattern = "yyyy-MM-dd HH:mm:ss";
            LocalDateTime inputDate = null;
            String outputDate = null;
            DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern(inputPattern, Locale.ENGLISH);
            DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern(outputPattern, Locale.ENGLISH);
            inputDate = LocalDateTime.parse(date, inputFormatter);
            outputDate = outputFormatter.format(inputDate);
            System.out.println("inputDate: " + inputDate);
            System.out.println("outputDate: " + outputDate);
    
    输出为:

    inputDate: 2021-05-27T18:47:07.053
    outputDate: 2021-05-27 18:47:07
    
    
    在这种情况下,我不知道如何获得时区的偏移值

    有许多建议,包括使用SimpleDateFormat和ZoneDateTime等,但考虑到偏移值可以是动态的,即它可以是+05:30、+09:00等,这应该是最好的答案

    在这种情况下请帮忙。

    像这样试试

    String dateTime = "2021-05-27T18:47:07+0530";
    String inputPattern = "yyyy-MM-dd'T'HH:mm:ssZ";
    String outputPattern = "yyyy-MM-dd HH:mm:ss";
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ", 
        Locale.ENGLISH);
    ZonedDateTime zdt = ZonedDateTime.parse(dateTime, dtf);
    ZoneOffset tz = zdt.getOffset();
    System.out.println(tz);
    System.out.println(zdt.format(DateTimeFormatter.ofPattern(outputPattern,
            Locale.ENGLISH)));
    
    印刷品

    +05:30
    2021-05-27 18:47:07
    
    分区日期时间也可以使用最初解析的格式重新打印。

    像这样尝试

    String dateTime = "2021-05-27T18:47:07+0530";
    String inputPattern = "yyyy-MM-dd'T'HH:mm:ssZ";
    String outputPattern = "yyyy-MM-dd HH:mm:ss";
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ", 
        Locale.ENGLISH);
    ZonedDateTime zdt = ZonedDateTime.parse(dateTime, dtf);
    ZoneOffset tz = zdt.getOffset();
    System.out.println(tz);
    System.out.println(zdt.format(DateTimeFormatter.ofPattern(outputPattern,
            Locale.ENGLISH)));
    
    印刷品

    +05:30
    2021-05-27 18:47:07
    

    分区日期时间也可以使用最初解析它时使用的相同格式重新打印。

    即使已弃用,您也可以使用
    date::getTimezoneOffset
    这是否回答了您的问题?您好@Berto99有太多的答案无法得出结论,大多数被接受的答案是将日期作为当前日期,而不是我们提供的日期。所以,这就是为什么它不能真正回答我的问题。即使它已被弃用,您也可以使用
    Date::getTimezoneOffset
    这是否回答了您的问题?您好@Berto99有太多的答案无法得出结论,大多数被接受的答案是将日期作为当前日期,而不是我们提供的日期。所以,这就是为什么它不能真正回答我的问题。回答得好。首选
    OffsetDateTime
    而不是
    zonedDateme
    ,因为字符串包含偏移量而不包含时区(如亚洲/科伦坡或美洲/纽约)。它在+0100或+0900的情况下工作得很好,但当使用+0000(即GMT)时,它返回偏移量的值Z。据我所知是祖鲁日期时间,它将返回Z而不是00:00。对吗?对。但是看看这个,它解决了一个使用偏移量格式化程序的解决方案。我使用了这个,因为by date是动态的,而不是instant.now(),所以我转换成instant对象并
    instant result=instant.from(dtf.parse(dateTime));ZoneOffset offset=ZoneId.systemDefault().getRules().getOffset(结果);System.out.println(offsetFormatter.format(offset))
    将在每次我的时区偏移量时得到相同的结果。所以,我认为即时约会需要更正。@RahulNans太棒了!无论什么都符合你的要求。回答得好。首选
    OffsetDateTime
    而不是
    zonedDateme
    ,因为字符串包含偏移量而不包含时区(如亚洲/科伦坡或美洲/纽约)。它在+0100或+0900的情况下工作得很好,但当使用+0000(即GMT)时,它返回偏移量的值Z。据我所知是祖鲁日期时间,它将返回Z而不是00:00。对吗?对。但是看看这个,它解决了一个使用偏移量格式化程序的解决方案。我使用了这个,因为by date是动态的,而不是instant.now(),所以我转换成instant对象并
    instant result=instant.from(dtf.parse(dateTime));ZoneOffset offset=ZoneId.systemDefault().getRules().getOffset(结果);System.out.println(offsetFormatter.format(offset))
    将在每次我的时区偏移量时得到相同的结果。所以,我认为即时约会需要更正。@RahulNans太棒了!只要符合你的要求。