SimpleDateFormat 没有正确解析时间
SimpleDateFormat not parsing time correctly
这发生在一个(可能更多)日期时间,其中时间部分在解析中完全错误。
代码:
import java.text.*;
import java.util.*;
public class TestTimeParse {
public static void main(String[] args) {
SimpleDateFormat dateFmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.getDefault());
dateFmt.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'");
ParsePosition pos = new ParsePosition(0);
Date date = dateFmt.parse("2018-11-01T18:07:55.6725292Z", pos);
System.out.println("Text 2018-11-01T18:07:55.6725292Z parses as " + date);
}
}
输出:
Text 2018-11-01T18:07:55.6725292Z parses as Thu Nov 01 20:00:00 MDT
2018
时间部分发生了什么?小时错误,分秒归零。
这是 one of the problems 以及已过时的 Date
、Calendar
和 SimpleDateFormat
类。您不应该使用它,因为它已被 Java 8 中的新日期和时间 API 取代。它在 java.time
包中可用。
String str = "2018-11-01T18:07:55.6725292Z";
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'";
LocalDateTime ts = LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern));
System.out.println("Text 2018-11-01T18:07:55.6725292Z parses as " + ts);
SimpleDateFormat 似乎最多只能读取三毫秒数字。如果将日期的小数部分截断为三位数,即“2018-11-01T18:07:55.672”而不是“2018-11-01T18:07:55.6725292Z”,并且还更改相应的 'S' 模式说明符,即 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'".
这发生在一个(可能更多)日期时间,其中时间部分在解析中完全错误。
代码:
import java.text.*;
import java.util.*;
public class TestTimeParse {
public static void main(String[] args) {
SimpleDateFormat dateFmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.DEFAULT, Locale.getDefault());
dateFmt.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'");
ParsePosition pos = new ParsePosition(0);
Date date = dateFmt.parse("2018-11-01T18:07:55.6725292Z", pos);
System.out.println("Text 2018-11-01T18:07:55.6725292Z parses as " + date);
}
}
输出:
Text 2018-11-01T18:07:55.6725292Z parses as Thu Nov 01 20:00:00 MDT 2018
时间部分发生了什么?小时错误,分秒归零。
这是 one of the problems 以及已过时的 Date
、Calendar
和 SimpleDateFormat
类。您不应该使用它,因为它已被 Java 8 中的新日期和时间 API 取代。它在 java.time
包中可用。
String str = "2018-11-01T18:07:55.6725292Z";
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSSSSS'Z'";
LocalDateTime ts = LocalDateTime.parse(str, DateTimeFormatter.ofPattern(pattern));
System.out.println("Text 2018-11-01T18:07:55.6725292Z parses as " + ts);
SimpleDateFormat 似乎最多只能读取三毫秒数字。如果将日期的小数部分截断为三位数,即“2018-11-01T18:07:55.672”而不是“2018-11-01T18:07:55.6725292Z”,并且还更改相应的 'S' 模式说明符,即 "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'".