使用 SimpleDateFormat 将字符串解析为日期

Parsing String to Date using SimpleDateFormat

我正在尝试将 string "Nov 6, 2017 11:47:53 AM" 解析为 Date SimpleDateFormat 但我找不到要使用的正确格式。有人可以帮助我吗?

使用"MMM dd, yyyy hh:mm:ss aaa"

public class Tester {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Date date = new Date();
        //Nov 6, 2017 11:47:53 AM
        SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss aaa");
        //sdf.parse(source);
        System.out.println(sdf.format(date));
    }

}

输出:

2017 年 11 月 6 日04:35:20上午

假设一天中的时间在 1-12 范围内,应该能够解析此文本的模板是 MMM d, yyyy hh:mm:ss a。如果它们在 0-11 范围内,将 hh 替换为 KK

即使在 Android 上,也值得考虑丢弃早已过时的 类 Date,尤其是 SimpleDateFormat,这被证明是相当麻烦的。我建议获取 ThreeTenABP。它将允许您在 Android 上使用现代 Java 日期和时间 API(对于 JSR-310,这是首次描述 API 的三十分之一)。

    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MMM d, uuuu h:mm:ss a", Locale.ENGLISH);
    String stringToParse = "Nov 6, 2017 11:47:53 AM";
    LocalDateTime dateTime = LocalDateTime.parse(stringToParse, dtf);

结果是 2017-11-06T11:47:53LocalDateTime

如果您确实需要一个老式的 Date 对象来实现某些遗留 API,您可以这样做:

    Date oldfashionedDate = Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant());

中有更多关于使用 ThreTenABP 的内容。