我想要将“ 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
吗?
答案 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