【问题标题】:How to convert time in YYYY-MM-DDTHH:mm:ss.SSSZ format to default timezone? [duplicate]如何将 YYYY-MM-DDTHH:mm:ss.SSSZ 格式的时间转换为默认时区? [复制]
【发布时间】:2011-10-23 23:54:27
【问题描述】:

我得到的时间格式为“2011-07-31T08:16:37.733Z”。实际上 Z 应该是时区,然后将该时间转换为本地时区。我现在如何实际将这个时间转换为默认时区。

【问题讨论】:

    标签: java android timezone


    【解决方案1】:

    RFC 3339 描述了用于日期/时间表示的特定 ISO 8601“配置文件”。

    如果可以选择使用第 3 方开源库,请查看 Joda-Time 的 ISODateTimeFormat 实用程序类。

    否则,如果您需要推出自己的代码,仅使用 SimpleDateFormat 是不够的,因为 ISO 8601/RFC 3339 表示时区信息的方式。

    如果你只需要解析'Z'(祖鲁语或UTC),那么它相对简单:

    String input = "2011-08-11T01:23:45.678Z";
    TimeZone utc = TimeZone.getTimeZone("UTC");
    SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    f.setTimeZone(utc);
    GregorianCalendar cal = new GregorianCalendar(utc);
    cal.setTime(f.parse(input));
    System.out.println(cal.getTime());
    

    应该在您当地的时区打印出“2011-08-11T01:23:45.678Z”。

    如果您需要处理 RFC 3339 中的任意时区,那么您需要扩展上述内容以解析出时区指示符并检索相应的 Java TimeZone 实例。如果它只是整个小时 +/- GMT,那应该不会太难,但在非标准偏移的情况下,您可能必须创建自己的 SimpleTimeZone 实例。

    【讨论】:

      【解决方案2】:
      private static SimpleDateFormat DATE_TIME_FORMAT=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
      
      DATE_TIME_FORMAT.setTimeZone(TimeZone.getID()); //for example
      date=DATE_TIME_FORMAT.format(curDate);
      

      【讨论】:

      • 我已经提到了日期即将到来的格式。该日期采用 RFC3339 格式。如果您对如何解析 RFC3339 日期有任何想法,请告诉我。
      • 以上已编辑,有帮助吗?这可能会有所帮助:cokere.com/RFC3339Date.txt
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 2023-03-15
      • 1970-01-01
      • 2018-08-11
      • 2016-12-02
      • 2017-08-21
      相关资源
      最近更新 更多