我无法将此字符串转换为Date

时间:2018-10-01 14:59:04

标签: java datetime simpledateformat

我想要将“ CET 2018年1月18日星期四00:00:00”转换为“ 2018-01-18”-> yyyy-mm-dd。

但是我遇到错误-> java.text.ParseException:无法解析的日期:“ CET 2018年1月18日星期四00:00:00”。

switch (cell.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC:

    stringValue =  String.valueOf(cell.getDateCellValue());
    DateFormat formatter = new SimpleDateFormat("E MMM dd HH:mm:ss Z yyyy");
    Date date = (Date)formatter.parse(stringValue);
    System.out.println(date);        
   break;
   case Cell.CELL_TYPE_STRING:... 
   break;
}

也许是为什么我弃用了cell.getCellType()Cell.CELL_TYPE_NUMERIC吗?

2 个答案:

答案 0 :(得分:1)

您的Locale似乎不是这种格式,请尝试Locale.US,并且您需要使用x作为时区,请尝试:

String input = "Thu Jan 18 00:00:00 CET 2018";

DateFormat parser = new SimpleDateFormat("E MMM dd HH:mm:ss x yyyy", Locale.US);
Date date = parser.parse(input); // parse String to Date

DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(formatter.format(date)); // format Date to String

或者您可以从Java8开始使用ZonedDateTime

String input = "Thu Jan 18 00:00:00 CET 2018";

ZonedDateTime zonedDateTime = ZonedDateTime.parse(input,
        DateTimeFormatter.ofPattern("E MMM dd HH:mm:ss z yyyy", Locale.US));

System.out.println(DateTimeFormatter.ISO_DATE.format(zonedDateTime.toLocalDate()));

答案 1 :(得分:1)

如果您未指定语言环境,那么JVM将使用系统的默认语言环境。如果这也恰好是美国英语(或其他语言,其中一月的缩写是“ Jan”),那么结果将是相同的。 请看一下这个线程:https://coderanch.com/t/491599/java/SimpleDateFormat-locale