Функция синтаксического анализа не может проанализировать строку и выдает ошибку в Java - PullRequest
1 голос
/ 01 августа 2020

Невозможно разобрать следующую дату. Получение исключения синтаксического анализа. Помогите пожалуйста в поиске ошибки:

            String myDate = "2020–03–01 3:15 pm";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm aa",Locale.ENGLISH);
            Date date = sdf.parse(myDate);

Ответы [ 2 ]

2 голосов
/ 01 августа 2020

Знак-разделитель, который вы использовали для разделения года, месяца и дня, кажется неправильным. Я предлагаю вам снова ввести строку даты и времени вместо того, чтобы копировать и вставлять ее откуда-то. Я также рекомендую вам перейти с устаревшего API даты и времени на современный .

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        String myDate = "2020-03-01 3:15 pm";
        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                            .parseCaseInsensitive()
                                            .appendPattern("u-M-d h:m a")
                                            .toFormatter(Locale.ENGLISH);
        LocalDateTime ldt = LocalDateTime.parse(myDate, formatter);
        System.out.println(ldt);
    }
}

Вывод:

2020-03-01T15:15

Если вы по-прежнему хотите использовать устаревший API даты и времени, вы можете сделать это следующим образом:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) throws ParseException {
        String myDate = "2020-03-01 3:15 pm";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd h:mm aa", Locale.ENGLISH);
        Date date = sdf.parse(myDate);
        System.out.println(date);
    }
}

Вывод:

Sun Mar 01 15:15:00 GMT 2020

Обратите внимание, что я использовал один h для соответствия вашей строке даты и времени.

2 голосов
/ 01 августа 2020

Судя по всему, ваша строка даты содержит (da sh) вместо - (дефис).

Попробуйте вместо этого использовать дефис в дате и посмотрите, удастся ли ему разобрать это правильно.

Детали бонусной таблицы ascii:

Da sh (-):

да sh

.

Дефис (-):

дефис

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...