Java日期从字符串解析

时间:2017-05-19 09:35:14

标签: java date datetime

我试图将String解析为Data,我创建了DataParser,根据日期格式,我写的代码是:

    String date_s = "04-May-2017 17:28:27";
    DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
    Date date;
    try {
        date = formatter.parse(date_s);
         System.out.println(date);
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

当我执行此操作时,我总是异常

java.text.ParseException: Unparseable date: "04-May-2017 17:28:27"

我不明白为什么没有解析数据,有人可以帮助我吗?

3 个答案:

答案 0 :(得分:2)

如果没有现代化的解决方案,这个答案的话题就不会完整。这些天你不应再使用DateSimpleDateFormat,而是切换到更新的日期和时间类:

    DateTimeFormatter formatter 
            = DateTimeFormatter.ofPattern("dd-MMM-yyyy HH:mm:ss", Locale.ENGLISH);
    LocalDateTime dateTime;
    try {
        dateTime = LocalDateTime.parse(date_s, formatter);
        System.out.println(dateTime);
    } catch (DateTimeParseException e) {
        System.err.println(e);
    }

打印

2017-05-04T17:28:27

LocalDateTime.toString()返回ISO 8601格式)如果遗漏Locale.ENGLISH,请在我的计算机上

Text '04-May-2017 17:28:27' could not be parsed at index 3

索引3是它所说的May,所以这个消息有点帮助。

LocalDateTimeDateTimeFormatter是在Java 8中引入的,但也被反向移植到Java 6和7中。

答案 1 :(得分:0)

您要解析的字符串是本地相关的(单词可能是英文),因此jvm无法推断可能是英语中may的月份

使用构造函数qith locale定义格式化程序。

DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.ENGLISH);

答案 2 :(得分:0)

您需要另一个Locale支持MMM的构造函数(五月

DateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss",Locale.US)

或使用带有月份数字的标准格式dd-MM-yyyy。 (对不起,与此同时答案已经发布)

相关问题