【问题标题】:Parsing from SimpleDateFormat to Date not working?从 SimpleDateFormat 解析到 Date 不起作用?
【发布时间】:2017-11-27 20:07:36
【问题描述】:
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)请我帮忙,谢谢!

【问题讨论】:

  • 由于您是新功能,我建议您不要从早已过时的DateSimpleDateFormat 开始。 java.time 也被称为 JSR-310,这是一个现代 Java 日期和时间 API,使用起来更方便,负面惊喜也更少。请参阅the Oracle tutorial 或查找其他教程。
  • 我很惊讶你发现的类似问题都没有在你的代码上起作用。我邀请您解释您尝试了什么以及它是如何失败的,我相信我们可以为您提供更好的帮助。
  • 发帖前请先搜索 Stack Overflow。解析日期时间字符串已在此站点上解决了数百甚至数千次。

标签: java date simpledateformat datetime-parsing dateformatter


【解决方案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 个有何不同,请参阅the documentation。请注意,格式模式字符串区分大小写。

问题:SimpleDateFormat

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

【讨论】:

  • 非常感谢!!这已经让它现在工作了,以后会记住这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多