关于java:如何将2018-04-10T04:00:00.000Z字符串转换为DateTime?

How do I convert 2018-04-10T04:00:00.000Z string to DateTime?

本问题已经有最佳答案,请猛点这里访问。

我从一个JSONAPI得到一个日期,它看起来像"2018-04-10t04:00:00.000z"。我想转换它以获得一个日期或字符串对象,并得到类似于"01-04-2018"的"dd-mm-yyyy"。我该怎么做?


更新:使用在Java 8中引入的EDCOX1 1Ω:

其思想是定义两种格式:一种用于输入格式,另一种用于输出格式。使用输入格式化程序进行分析,然后使用输出格式化程序进行格式化。

除了后面的Z,您的输入格式看起来相当标准。不管怎样,让我们来处理这个问题:"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"。尾随的'Z'是有趣的部分。通常这里有时区数据,比如-0700。所以模式应该是...Z,也就是说,没有撇号。

输出格式要简单得多:"dd-MM-yyyy"。注意小的ys。

下面是示例代码:

1
2
3
4
5
DateTimeFormatter inputFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
DateTimeFormatter outputFormatter = DateTimeFormatter.ofPattern("dd-MM-yyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse("2018-04-10T04:00:00.000Z", inputFormatter);
String formattedDate = outputFormatter.format(date);
System.out.println(formattedDate); // prints 10-04-2018

原始答案-使用旧API SimpleDateFormat

1
2
3
4
5
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = inputFormat.parse("2018-04-10T04:00:00.000Z");
String formattedDate = outputFormat.format(date);
System.out.println(formattedDate); // prints 10-04-2018


使用日期模式EDCOX1、0和Java 8

1
2
3
4
String string ="2018-04-10T04:00:00.000Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date);

更新:用于26岁之前的儿童使用JODA时间

1
2
3
String string ="2018-04-10T04:00:00.000Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
LocalDate date = org.joda.time.LocalDate.parse(string, formatter);

在app/build.gradle文件中,像这样添加-

1
2
3
dependencies {    
    compile 'joda-time:joda-time:2.9.4'
}