Невозможно преобразовать дату, прочитанную из файла: результат в java.text.ParseException: Unparseable date

Я пытаюсь преобразовать строковую дату в объектную дату. Он отлично работает, если я использую строку, но когда я читаю строковую дату из файла, результатом является ko. На форумах я обнаружил, что причина может исходить из зоны. Это все еще нокаут.

Я не могу сказать, почему формат даты вызывает исключение.: О (

Фрагмент моего кода:

package main;

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import java.util.logging.Level;
import java.util.logging.Logger;


public class dateTestConv {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {

    String dateOK1 = new String("21/01/2017");
    convertDateStringEuroToDateObject(dateOK1);

    String dateOK2= "21/01/2017";
    convertDateStringEuroToDateObject(dateOK2);

    //From file =KO
    collectDateFromFile();
}

public static Date convertDateStringEuroToDateObject(String date) {


    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy",Locale.FRANCE);
    Date d = null;
    try {
        dateFormat.setTimeZone(TimeZone.getTimeZone("Europe/Paris"));
        d = dateFormat.parse(date);

    } catch (ParseException ex) {
        Logger.getLogger(dateTestConv.class.getName()).log(Level.SEVERE, null, ex);
    }
    return d;
}






public static void collectDateFromFile(){
    String dirName=new String("dates.txt");
    File file = new File(dirName);
    try {
        FileInputStream fstreami = new FileInputStream(dirName);
        DataInputStream in = new DataInputStream(fstreami);
        BufferedReader br = new BufferedReader(new InputStreamReader(in));
        String strLine;
        while ((strLine = br.readLine()) != null)   {
            String dateFormatNormal = strLine;
            Date d0= convertDateStringEuroToDateObject(dateFormatNormal);
        }
        in.close();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}




}

Файл date.txt содержит только одну строку: 21/01/2017

Когда вызывается метод collectDateFromFile(), возникает это исключение:

SEVERE: null
java.text.ParseException: Unparseable date: "21/01/2017"
at java.text.DateFormat.parse(DateFormat.java:366)
at         main.dateTestConv.convertDateStringEuroToDateObject(dateTestConv.java:52)
at main.dateTestConv.collectDateFromFile(dateTestConv.java:75)
at main.dateTestConv.main(dateTestConv.java:42)

Спасибо за вашу помощь.

2 ответа

Решение

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

    String dateFormatNormal = strLine;
/* Debug: is there an unexpected unicode codepoint hiding in there? */
    System.out.println("Received: " + dateFormatNormal.codePoints()
            .mapToObj(i -> String.format("0x%04x (%s)", i, String.valueOf(Character.toChars(i))))
            .collect(Collectors.toList()));
    System.out.println("Expected: " + "21/01/2017".codePoints()
            .mapToObj(i -> String.format("0x%04x (%s)", i, String.valueOf(Character.toChars(i))))
            .collect(Collectors.toList()));
/* Remove Debug code when done */

Это может быть из-за пробела в строке. Попробуйте обрезать строку и затем разобрать

Другие вопросы по тегам