如何在Java中解析日期?对日期格式有些困惑。

3

我曾使用Twitter API获取推文并使用twitter4j库进行操作。在此过程中,我得到一条推文的日期字符串为"Thu Feb 26 00:16:19 EST 2015"。请问如何将其转换为Java的Date对象?


1
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");Date startDate = df.parse(startDateString);更多相关信息请点击这里:https://dev59.com/UWw15IYBdhLWcg3wmc4J - Skynet
1个回答

5

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 是线程安全的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接