Java 我能';无法将此字符串转换为日期

Java 我能';无法将此字符串转换为日期,java,datetime,simpledateformat,Java,Datetime,Simpledateformat,我想将“2018年1月18日星期四00:00:00 CET”转换为“2018-01-18”->yyyy-mm-dd 但我得到错误->java.text.ParseException:不可解析的日期:“2018年1月18日星期四00:00:00 CET” 也许这就是为什么我不推荐使用cell.getCellType()和cell.cell\u TYPE\u NUMERIC 您的Locale似乎不是此格式,请尝试Locale.US,如果您需要使用x时区,请尝试: String input = "Th

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

但我得到错误->java.text.ParseException:不可解析的日期:“2018年1月18日星期四00:00:00 CET”


也许这就是为什么我不推荐使用
cell.getCellType()
cell.cell\u TYPE\u NUMERIC

您的
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:

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()));

您的
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:

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()));

如果不指定区域设置,JVM将使用系统的默认区域设置。如果这也碰巧是美国英语(或者一月的缩写为“Jan”的其他语言),那么结果将是相同的。
请查看此线程:

如果不指定区域设置,JVM将使用系统的默认区域设置。如果这也碰巧是美国英语(或者一月的缩写为“Jan”的其他语言),那么结果将是相同的。
请看一看这个帖子:

旁注:“2018年1月18日”不会导致“2018-01-01”:)2018-01-18 XDDD你太复杂了。假设您使用的是ApachePOI,
cell.getDateCellValue()
已经返回了一个
java.util.Date
。然后代码将其转换为
字符串
,并尝试将其转换回
日期
。没有理由这么做。
Date
类不仅早已过时,而且还存在一系列设计问题。虽然我不认为有一个POI版本可以为您提供更好的功能,但我建议您使用
Instant inst=cell.getDateCellValue().toInstant()并从这一点开始使用。旁注:“2018年1月18日”不会导致“2018-01-01”:)2018-01-18 XDDD您将其过度复杂化。假设您使用的是ApachePOI,
cell.getDateCellValue()
已经返回了一个
java.util.Date
。然后代码将其转换为
字符串
,并尝试将其转换回
日期
。没有理由这么做。
Date
类不仅早已过时,而且还存在一系列设计问题。虽然我不认为有一个POI版本可以为您提供更好的功能,但我建议您使用
Instant inst=cell.getDateCellValue().toInstant()并从此点开始使用.System.out.println(日期);-->2018年1月18日星期四00:00:00 CETxDD@EduBw您需要两个
SimpleDataFormat
,请参阅更新的answer.System.out.println(日期);-->2018年1月18日星期四00:00:00 CETxDD@EduBw您需要两个
SimpleDataFormat
,请参阅更新的答案。