如何获取 java 中的时区偏移值

How to get TimeZone offset value in java

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

  1. 我想将这个日期“2021-05-27T18:47:07+0530”解析为 yyyy-mm-dd HH:MM:SS
  2. 获取日期的偏移值,以便我可以将时区偏移量设置为 +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 和 ZonedDateTime 等,但考虑到偏移值可以是动态的,即它可以是 +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

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