java.lang.IllegalArgumentException: неверный формат: «Чт, 24 мая 2018 14:00:00 GMT + 0200» - PullRequest
0 голосов
/ 26 мая 2018

Я пытаюсь преобразовать строковую дату, например "Чт 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: «Пт 25 мая 2018 12:00:00 GMT + 0200 "на java.text.DateFormat.parse (DateFormat.java:366)

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

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;

Joda-Время

Не то, чтобы вы пожалели о переходе на 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).

0 голосов
/ 26 мая 2018

Чтобы преобразовать 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();
...