-2
SimpleDateFormat df = new SimpleDateFormat();
Date lastLogin = null;
try {
    String troubleChild = lineScanner.next();
    lastLogin = df.parse(troubleChild);
} catch (ParseException e) {
    System.out.println("ohnoes");
}

嗨,我对使用日期函数很陌生,但遇到了一个问题。我有一个文件被解析成各种变量,它们都可以工作,除了这个我永远无法得到它,所以它通过了 try/catch 子句我已经查找了类似的问题,但它们都不适用于我的代码。(我输入的日期格式为:2017 年 10 月 30 日星期一 22:20:11 GMT)请给我一些帮助,谢谢!

4

1 回答 1

1

解决方案:java.time

请不要为长期过时的课程DateSimpleDateFormat. 改为使用java.time现代 Java 日期和时间 API,也称为 JSR-310:

    DateTimeFormatter dtf 
            = DateTimeFormatter.ofPattern("E, MMM d H:mm:ss z uuuu", Locale.UK);
    String inputDate = "Mon, Oct 30 22:20:11 GMT 2017";
    ZonedDateTime lastLogin = ZonedDateTime.parse(inputDate, dtf);
    System.out.println(lastLogin);

这打印

2017-10-30T22:20:11Z[GMT]

由于日期和时间可能有多种不同的文本格式,因此我使用格式模式字符串来指定您的特定格式。对于您可以使用哪些字母,以及使用相同字母的 1、3 或 4 个有何不同,请参阅文档。请注意,格式模式字符串区分大小写。

问题:SimpleDateFormat

您使用了无参数SimpleDateFormat构造函数。按照我阅读文档的方式,这为您提供了您所在地区的默认日期格式。如果您的 JVM 运行的是英国语言环境,我相信格式会像28/11/17 10:57- 与您尝试解析的输入格式不太一样。您可以使用System.out.println(df.format(new Date()));来查找。通常SimpleDateFormat使用的构造函数是SimpleDateFormat(String, Locale)这样您就可以再次提供格式模式字符串和语言环境。

于 2017-11-28T11:06:07.923 回答