java.lang.IllegalArgumentException: 无效格式: "Thu May 24 2018 14:00:00 GMT+0200"



我正在尝试将字符串日期转换为"2018 年 5 月 24 日星期四 14:00:00 GMT+0200"到 Joda 日期时间 (v.2.9.9(,但我收到无效格式异常:

String pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
for (int i=0; i < arrayHorarios.length; i++) {
DateTime dateTime = new DateTime();
dateTime = formatter.withOffsetParsed().parseDateTime(arrayHorarios[i]);
}

我做错了什么?我的目标是将所有包含日期的字符串转换为 Java 日期,然后将它们保存到数据库中......最简单的方法是什么?(有或没有乔达(。

编辑:

我更改为正确的模式。使用Java DateFormat也是无用的:

ObjectMapper mapper = new ObjectMapper();
String[] arrayHorarios = mapper.readValue(horariosSave, String[].class);
DateFormat df = new SimpleDateFormat("EEE MMM dd yyyy HH:mm:ss z", Locale.ENGLISH);
//sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
List<Date> hor = new ArrayList<Date>();
Date date = new Date();
try {
for (int i=0; i < arrayHorarios.length; i++) {
// conversión de String a Date de los valores                
System.out.println("Horario nº:"+i);
System.out.println("String = "+arrayHorarios[i]);
date = df.parse(arrayHorarios[i]);
System.out.println("Date = " + df.format(date));          
hor.add(date);
}
System.out.println("Clases guardadas:"+hor.size());
} catch (Exception e) {
e.printStackTrace();
}

这样我得到这个异常:

java.text.ParseException:不可解析的日期:"2018 年 5 月 25 日星期五 12:00:00 GMT+0200" at java.text.DateFormat.parse(DateFormat.java:366(

java.time

我想知道是否有办法用Java 8 Util Time做到这一点。

当然有。

String pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern, Locale.ENGLISH);
String horario = "Thu May 24 2018 14:00:00 GMT+0200";
OffsetDateTime dateTime = OffsetDateTime.parse(horario, formatter);
System.out.println(dateTime);

指纹:

2018-05-24T14:00+02:00

使用的进口有:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

乔达时间

并不是说你会后悔升级到java.time,你的Joda-Time代码似乎也有效:

String pattern = "EEE MMM dd yyyy HH:mm:ss 'GMT'Z";
DateTimeFormatter formatter = DateTimeFormat.forPattern(pattern);
String horario = "Thu May 24 2018 14:00:00 GMT+0200";
DateTime dateTime = formatter.withOffsetParsed().parseDateTime(horario);
System.out.println(dateTime);

这将打印:

2018-05-24T14:00:00.000+02:00

我怀疑你的问题可能在其他地方。

PS 您可能已经知道 Joda-Time 主页上写着:

现在要求用户迁移到java.time(JSR-310(。

要将 Java Date 转换为 Joda DateTime:-

Date date = new Date();
DateTime dateTime = new DateTime(date);

使用时区,如果需要:-

TimeZone timeZone= dateTime.getZone().toTimeZone();
DateTime dateTimeNew = new DateTime(date.getTime(), timeZone);
Date dateTimeZone = dateTime.toDateTimeAtStartOfDay(timeZone).toDate();

相关内容

最新更新