java.lang.IllegalArgumentException:格式无效:"Thu May 24 2018 14:00:00 GMT+0200"
java.lang.IllegalArgumentException: Invalid format: "Thu May 24 2018 14:00:00 GMT+0200"
我正在尝试将 "Thu May 24 2018 14:00:00 GMT+0200" 之类的字符串日期转换为 Joda DateTime (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 日期,然后将它们保存到数据库中……最简单的方法是什么? (有或没有 Joda)。
编辑:
我改成了正确的模式。使用 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: Unparseable date: "Fri May 25 2018 12:00:00 GMT+0200"
at java.text.DateFormat.parse(DateFormat.java:366)
要将 Java 日期转换为 Joda 日期时间:-
Date date = new Date();
DateTime dateTime = new DateTime(date);
使用 TimeZone,如果需要:-
TimeZone timeZone= dateTime.getZone().toTimeZone();
DateTime dateTimeNew = new DateTime(date.getTime(), timeZone);
Date dateTimeZone = dateTime.toDateTimeAtStartOfDay(timeZone).toDate();
java.time
I wonder if there is a way to do it with 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 您可能已经知道 the Joda-Time home page 说:
Users are now asked to migrate to java.time
(JSR-310).
我正在尝试将 "Thu May 24 2018 14:00:00 GMT+0200" 之类的字符串日期转换为 Joda DateTime (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 日期,然后将它们保存到数据库中……最简单的方法是什么? (有或没有 Joda)。
编辑:
我改成了正确的模式。使用 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: Unparseable date: "Fri May 25 2018 12:00:00 GMT+0200" at java.text.DateFormat.parse(DateFormat.java:366)
要将 Java 日期转换为 Joda 日期时间:-
Date date = new Date();
DateTime dateTime = new DateTime(date);
使用 TimeZone,如果需要:-
TimeZone timeZone= dateTime.getZone().toTimeZone();
DateTime dateTimeNew = new DateTime(date.getTime(), timeZone);
Date dateTimeZone = dateTime.toDateTimeAtStartOfDay(timeZone).toDate();
java.time
I wonder if there is a way to do it with 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 您可能已经知道 the Joda-Time home page 说:
Users are now asked to migrate to
java.time
(JSR-310).