【问题标题】:What is the date format of 2019-06-17T20:27:23.706000000Z? [duplicate]2019-06-17T20:27:23.706000000Z 的日期格式是什么? [复制]
【发布时间】:2019-11-05 07:39:15
【问题描述】:

2019-06-17T20:27:23.706000000Z 的日期格式是什么? 我需要这种日期格式的日期格式,还需要解析并转换为java Date。

我试过这个:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");

但是,它给了我不正确的结果。

【问题讨论】:

  • 我建议你不要使用SimpleDateFormat。这个类是出了名的麻烦而且已经过时了。您的格式是 ISO 8601。使用 InstantOffsetDateTime,两者都来自 java.time, the modern Java date and time API。它们中的每一个都将在没有任何显式格式化程序的情况下解析您的字符串。
  • 嘿,谢谢你的信息。是的,我使用的是比传统日期时间类更好的即时类

标签: java date simpledateformat date-format dateformatter


【解决方案1】:

试试这个:

import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.DateFormat;
import java.util.TimeZone;

public class Main
{
    public static void main(String[] args){
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
        try{
            Date date = sdf.parse("2019-06-17T20:27:23.706Z");
            System.out.println(date);
        }
        catch(Exception pe){
            System.out.println(pe);
        }

    }
}

输出:

Mon Jun 17 20:27:23 UTC 2019

顺便说一句,你也可以试试这个:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSSS'Z'");

两者都给出相同的结果

尝试使用来自java.time 包(java 8)的Instant

String value = "2019-06-17T20:27:23.706000000Z";
Instant instant = Instant.parse(value);
Date date = Date.from(instant);

【讨论】:

  • 感谢 Anubav,如果我们使用 2019-06-17T20:27:23.706000000Z 它给我的结果是 Wed Jun 26 00:34:03 PDT 2019 这是不正确的..所以它只能支持 3以毫秒为单位的数字?有没有办法处理超过 3 位数字?
  • 是的,因为毫秒(SSS)只能是三位数
  • 浏览这个 SO 答案和 cmets,我想你会找到答案的。 stackoverflow.com/questions/47926442/…
  • 是的,当然。我已经包含了 java.time 包中的解决方案。
猜你喜欢
  • 2019-10-31
  • 2019-05-14
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 2019-06-15
  • 2015-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多