Java中的解析日期如何?对日期格式有些混淆

时间:2015-02-26 06:00:29

标签: java android date date-format

我使用Twitter并使用API​​获取推文,我正在使用twitter4j库。 在那里,我的推文日期是" Thu Feb 26 00:16:19 EST 2015"这是一个日期字符串。如何将此日期字符串解析为Date对象。

1 个答案:

答案 0 :(得分: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是线程安全的。