【问题标题】:How to get the time zone from a datetime string如何从日期时间字符串中获取时区
【发布时间】:2016-05-13 15:44:57
【问题描述】:

如何从具有这种格式2013-08-15T13:00:00-07:00 的日期时间字符串中获取时区?

【问题讨论】:

  • 您想要哪种格式?偏移量?显示名称?三字母代码?

标签: java android timezone datetime-format string-parsing


【解决方案1】:

2013-08-15T13:00:00-07:00

最后一个-7:00 means GMT-7 那是 MST(山地标准时间)

该时区在美国和加拿大使用

【讨论】:

  • 该答案的哪一部分描述了如何在 Java 中以编程方式获取时区?
【解决方案2】:

在 Java 7 中,您可以使用和不使用 TZ 进行解析,然后计算偏移量,同时考虑您当前的 TZ 偏移量。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
Date withTZ = sdf.parse("2013-08-15T13:00:00-07:00");

SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date noTZ = sdf2.parse("2013-08-15T13:00:00-07:00");

【讨论】:

    【解决方案3】:

    如果是Java 8,可以直接用ISO_ZONED_DATE_TIME格式解析

    String input = "2013-08-15T13:00:00-07:00";                             
    ZonedDateTime zDateTime = ZonedDateTime.parse(input, DateTimeFormatter.ISO_ZONED_DATE_TIME);            
    ZoneId zone = zDateTime.getZone();  
    

    【讨论】:

      【解决方案4】:

      您可以从 Andreas 的答案中获取时间偏移,并使用下面的 sinppet 来获取 TimeZone 对象。

      TimeZone tmzo = TimeZone.getTimeZone("GMT"+offset);
      System.out.println(tmzo.getID());
      

      【讨论】:

        【解决方案5】:

        您可以使用正则表达式。以下假设XML dateTime 语法:

        String input = "2013-08-15T13:00:00-07:00";
        Matcher m = Pattern.compile("(?:[+-]\\d{2}:\\d{2}|Z)$").matcher(input);
        if (m.find())
            System.out.println("Time zone: " + m.group());
        else
            System.out.println("No time zone found");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-13
          • 2013-04-01
          • 1970-01-01
          • 2023-03-18
          • 1970-01-01
          • 2015-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多