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

时间:2018-05-26 14:41:08

标签: datetime jodatime simpledateformat date-format

我正在尝试将字符串日期转换为“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日期,然后将它们保存到DB中...这是最简单的方法吗? (有或没有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”       在java.text.DateFormat.parse(DateFormat.java:366)

2 个答案:

答案 0 :(得分:2)

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您可能已经知道the Joda-Time home page说:

  

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

答案 1 :(得分:0)

将Java Date转换为Joda DateTime: -

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