Исключение неразборчивой даты SimpleDateFormat для формата Hmm - PullRequest
0 голосов
/ 21 июня 2020

При проверке данной строки текст имеет формат Hmm появляется эта ошибка

java .text.ParseException: Unparseable date: «1637»

, но это работает для текста «747».

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

    public class Validation{
    
         public void validateDateFormat(String format,String text){
              SimpleDateFormat sdfrmt = new SimpleDateFormat(format);
              sdfrmt.setLenient(false);
              Date testDate = null;
              try {
                    testDate = sdfrmt.parse(text);
    
              } catch (ParseException e) {
                    System.out.println("dateFormat Exception :");
                    e.printStackTrace();
            }
         }
         
         public static void main(String []args){
            Validation val = new Validation();
            val.validateDateFormat("Hmm","747"); //working 
            val.validateDateFormat("Hmm","1637");//not working
         }
    }

Это для проверки данных столбцов из загруженного файла. Поэтому написал это как Dynami c на основе формата, записанного в конфиг для каждого столбца.

Ответы [ 2 ]

1 голос
/ 21 июня 2020

Это происходит из-за того, что SimpleDateFormat не может проанализировать данную дату в указанном вами формате.

Давайте разберемся - ваш формат Hmm, и вы указали дату как 747 тогда, конечно, во время синтаксического анализа первая буква 7 даты сопоставляется с первой буквой «H» формата, т.е. часы, а 47 сопоставляется с mm, то есть минуты, и, следовательно, он может правильно преобразовать но для следующей даты 1637 он не работает, потому что он не знает, какую букву назначить H.

Вот несколько вариантов, которые вы можете попробовать сделать более универсальным c, выберите формат, например как HHmm и всегда указывайте дату длиной 4, например, для 747 введите ввод как 0747, и он должен работать.

Или выберите более понятный формат для отображения парсером например, вы можете выбрать формат как H:mm и указать входные данные как 7:47 или 16:37, так как между часами и минутами есть разделитель :, синтаксический анализатор сможет анализировать все типы времени независимо от o f длина данного входа 3 или 4.

1 голос
/ 21 июня 2020

Ну, это должно работать.

Но вы должны использовать более новый Java Date and Time API (JSR 310), доступный в пакете java.time.

Если вы затем замените Date на LocalTime, SimpleDateFormat на DateTimeFormatter (используя заводской метод ofPattern) и ParseException на DateTimeParseException, , это будет работать .

...