我正在尝试解析一个String date,如下所示:Mon Dec 28 15:18:16 2021
转换成这样的东西:yyyy-MM-dd HH:mm:ss z
这是我的代码
public void parseDate(String stringDate) throws ParseException {
SimpleDateFormat formatRecived = new SimpleDateFormat("Www Mmm dd HH:mm:ss YYYY");
try{
Date date = formatRecived.parse(stringDate);
System.out.println(date);
}catch (ParseException parseException){
System.out.println(parseException.getMessage());
}
}
我的异常消息是Unparseable date: "Mon Dec 28 15:18:16 2021"
你能帮我吗?
2条答案
按热度按时间xdnvmnnf1#
tl;dr
2021-12-28 15:18:16
数据错误
开始,你的输入数据是有缺陷的。2021-12-28是星期二,而不是星期一。所以你的输入示例应该是:
避免使用遗留的日期时间类
您正在使用有严重缺陷的日期-时间类,这些类在几年前就被JSR 310中定义的现代 java.time 类所取代。
定义格式化模式
让我们编写一个与输入匹配的格式模式。
LocalDateTime
然后解析为一个
LocalDateTime
。这个类表示一个带有时间的日期,但缺少时区或UTC偏移量的上下文。解分区转分区?
你的输入字符串没有时区或偏移量,但你希望在输出中有一个,在输出中你指定了
z
。这是没有意义的。您必须为输入数据指定一个时区(或偏移量)。但您提供的信息不足以实现这一点。
您可以将
ZoneId
应用于LocalDateTime
以获得ZonedDateTime
。通过提取Instant
来调整到UTC。ISO 8601
否则,所需的输出文本的格式类似于
LocalDateTime#toString
中默认使用的标准ISO 8601格式。2021-12-28T15:18:16
您可以通过简单的文本操作将中间的
T
替换为SPACE(或者您可以定义另一种自定义格式模式)。zpgglvta2#
试试下面的代码-
我把“WWW”改成了“E”,把“YYYY”改成了“YYYY”。