Java 7 或更低版本:
如果您使用 Java 7 或更低版本,则可以这样解析日期(有关日期时间格式的更多信息,请点击此处http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html):
public static Date java7() throws ParseException {
String dateAsString = "Thu Feb 26 00:16:19 EST 2015";
DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy");
return df.parse(dateAsString);
}
Java 8:
Java 8 有一个新的日期/时间 API (java.time),因此您可以使用新的 API 进行类似的解析:
将解析的日期/时间转换为本地时区(当前计算机时区):
public static LocalDateTime java8() {
String dateAsString = "Thu Feb 26 00:16:19 EST 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy");
return LocalDateTime.parse(dateAsString, formatter);
}
如果您需要保留原始字符串中的时区信息,请使用 ZonedDateTime 而不是 LocalDateTime:
public static ZonedDateTime java8Zoned() {
String dateAsString = "Thu Feb 26 00:16:19 EST 2015";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z yyyy");
return ZonedDateTime.parse(dateAsString, formatter);
}
有关 java.time API 中日期/时间格式的更多信息:https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
另外,请注意旧的 SimpleDateFormat 和新的 java 8 DateTimeFormatter 之间的主要区别在于 SimpleDateFormat 不是线程安全的。这意味着您不能跨多个并行线程使用相同的格式化程序实例。然而,新的 DateTimeFormatter 是线程安全的。