无法转换从文件读取的日期:导致 java.text.ParseException:无法解析的日期
Unable to convert date read from a file : result in java.text.ParseException: Unparseable date
我正在尝试将字符串日期转换为对象日期。
如果我使用字符串,它会完美地工作,但是当我从文件中读取字符串日期时,结果是 ko。
在论坛上,我发现原因可能来自区域。还是KO。
我说不出为什么日期格式会出现异常。 :o(
我的代码片段:
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();
}
}
}
文件 dates.txt 仅包含一行:
2017 年 1 月 21 日
调用方法 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)
感谢您的帮助。
这可能是由于字符串中的 space。在字符串上尝试 trim,然后解析
简单的说,字符串不是你想的那样。所以你需要通过比较接收到的值和期望值来调试它。例如,如果其中隐藏了一个意外的 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 */
我正在尝试将字符串日期转换为对象日期。 如果我使用字符串,它会完美地工作,但是当我从文件中读取字符串日期时,结果是 ko。 在论坛上,我发现原因可能来自区域。还是KO。
我说不出为什么日期格式会出现异常。 :o(
我的代码片段:
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();
}
}
}
文件 dates.txt 仅包含一行: 2017 年 1 月 21 日
调用方法 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)
感谢您的帮助。
这可能是由于字符串中的 space。在字符串上尝试 trim,然后解析
简单的说,字符串不是你想的那样。所以你需要通过比较接收到的值和期望值来调试它。例如,如果其中隐藏了一个意外的 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 */