Java从字符串中解析日期

标签 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"

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

最佳答案

如果没有现代解决方案,这条答案就不会完整。现在,您不应再使用 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 是五月 的位置,因此该消息有些帮助。

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

关于Java从字符串中解析日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44066459/

相关文章:

Java正则表达式全部替换

java - 运行 arquillian cucumber JVM 测试时 Eclipse 控制台文本问题

date - 将 Moment.js 默认日期格式设置为 dd/mm/yyyy

c - 如何验证输入日期是否在日期间隔内?

mysql - MySQL中两个日期之间的差异

java - 为什么 1971 年 11 月 1 日之前的日期会在 java.util.Date 中添加一个小时?

java - 如何访问android中的下载文件夹?

Java 爬虫库 - 使用目录列表解析器递归 HTTP 子树下载

php - 在 PHP 中将日期添加到日期

python - numpy.genfromtxt() dtype 用 AM/PM 解析日期时间字符串