【发布时间】:2018-05-26 14:41:08
【问题描述】:
我正在尝试将“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:无法解析的日期:“2018 年 5 月 25 日星期五 12:00:00 GMT+0200” 在 java.text.DateFormat.parse(DateFormat.java:366)
【问题讨论】:
-
可能是语言环境问题吗? “Thu” 和 “May” 是英文的,所以如果你的格式化程序使用的是非英语语言环境,它将无法工作。
-
我添加了 withLocale(Locale.ENGLISH) 但这也没有用。这是与 GMT+0200 相关的解析问题,因为没有该字符,一切正常,但我也需要保存。
-
我无法复制。您的 Joda-Time 格式化程序在我的计算机上将您的字符串很好地解析为 2018-05-24T14:00:00.000+02:00。
-
如果我将 'GMT'z 添加到模式并将 withOffsetParsed() 方法添加到格式化程序,Joda 在我的计算机上工作正常。无论如何,在 Hibernate 中保存 Joda DateTime 比 Java LocalDateTime 更复杂。我想知道是否有办法使用 Java 8 Util Time。
-
仅供参考,Joda-Time 项目现在位于maintenance mode,团队建议迁移到java.time 类。见Tutorial by Oracle。
标签: datetime jodatime simpledateformat date-format