Java 无法使用jexcel api将字符串解析为日期
我面临着几天前遇到的一个问题。我必须解析这个文件并将字符串转换为日期。几天前,我对另一个CSV文件也做了同样的操作。但是,新文件出现以下错误:java.text.ParseException:不可解析日期:“2011年3月4日” 为什么字符串周围打印有两个“”呢?我认为这是问题的根本原因。我把代码贴在下面。请注意,同样的代码适用于另一个文件,其中日期打印为2011年3月4日,周围没有“”字样Java 无法使用jexcel api将字符串解析为日期,java,jexcelapi,Java,Jexcelapi,我面临着几天前遇到的一个问题。我必须解析这个文件并将字符串转换为日期。几天前,我对另一个CSV文件也做了同样的操作。但是,新文件出现以下错误:java.text.ParseException:不可解析日期:“2011年3月4日” 为什么字符串周围打印有两个“”呢?我认为这是问题的根本原因。我把代码贴在下面。请注意,同样的代码适用于另一个文件,其中日期打印为2011年3月4日,周围没有“”字样 WritableWorkbook wbwrite=null; WritableShe
WritableWorkbook wbwrite=null;
WritableSheet sheet=null;
Label lwrite=null;
BufferedReader br=null;
Number n=null;
String strFile="quotes.csv";
String strLine = "";
String st[];
String delimiter="[,]";
int lineNumber = 0, tokenNumber = 0;
int length=0;
int counter=0;
Calendar cal = Calendar.getInstance();
DateTime datecell=null;
if(strFile.equals("quotes.csv"))
{
System.out.print("in loop if");
try
{
File file=new File("quotes.xls");
wbwrite=Workbook.createWorkbook(file);
System.out.print("file created");
//path=file.getCanonicalPath();
sheet = wbwrite.createSheet("Sheet 1", 0);
lwrite=null;
n=null;
Date dtest=null;
DateFormat df=null;
Date dadd=null;
df=new SimpleDateFormat("dd-mm-yy");
//create BufferedReader to read csv file
br = new BufferedReader( new FileReader(strFile));
strLine = "";
//st[]=empty;
delimiter="[,]";
lineNumber = 0; tokenNumber = 0;
length=0;
//read comma separated file line by line
while( (strLine = br.readLine()) != null)
{
//System.out.print("strline="+strLine);
//break comma separated line using ","
st=strLine.split(delimiter);
length=0;
while(length<st.length)
{
//display csv values
//
System.out.println("Line # " + lineNumber +
", Token # " + tokenNumber
+ ", Token : "+ st[length]);
if(tokenNumber==2)
{
System.out.print("date="+st[length]);
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
Date date = (Date)formatter.parse(st[length]);
System.out.print("date="+date);
cal.setTime(date);
cal.set(Calendar.HOUR_OF_DAY, 17);
cal.set(Calendar.MINUTE, 30);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
date = cal.getTime();
System.out.print("date="+date);
datecell=new DateTime(tokenNumber,lineNumber,date);
sheet.addCell(datecell);
lwrite=new Label(tokenNumber,lineNumber,st[length]);
sheet.addCell(lwrite);
}
if(tokenNumber==1||tokenNumber==5||tokenNumber==6||tokenNumber==7)
{
n=new Number(tokenNumber,lineNumber,Float.parseFloat(st[length]));
sheet.addCell(n);
}
tokenNumber++;
length++;
}
//reset token number
//tokenNumber = 0;
}
wbwrite.write();
wbwrite.close();
}
catch(Exception e)
{
System.out.print("error="+e);
}
}
}
writeableworkbook wbwrite=null;
WritableSheet=null;
标签lwrite=null;
BufferedReader br=null;
数字n=null;
字符串strFile=“quotes.csv”;
字符串strLine=“”;
字符串st[];
字符串分隔符=“[,]”;
int lineNumber=0,tokenNumber=0;
整数长度=0;
int计数器=0;
Calendar cal=Calendar.getInstance();
DateTime datecell=null;
if(strFile.equals(“quotes.csv”))
{
系统输出打印(“循环内if”);
尝试
{
File File=新文件(“quotes.xls”);
wbwrite=工作簿。创建工作簿(文件);
系统输出打印(“文件创建”);
//path=file.getCanonicalPath();
sheet=wbwrite.createSheet(“工作表1”,0);
lwrite=null;
n=零;
日期dtest=null;
DateFormat df=null;
日期dadd=null;
df=新的简化格式(“dd-mm-yy”);
//创建BufferedReader以读取csv文件
br=新的BufferedReader(新的文件读取器(strFile));
斯特林=”;
//st[]=空;
分隔符=“[,]”;
lineNumber=0;tokenNumber=0;
长度=0;
//逐行读取逗号分隔的文件
而((strLine=br.readLine())!=null)
{
//系统输出打印(“strline=“+strline”);
//使用“,”分隔逗号分隔行
st=strLine.split(分隔符);
长度=0;
while(length我解决了这个问题。字符串已经有了前导引号和尾随引号,在解析时会导致双引号。这就是“3/4/2011”的原因。
我补充说
if (st[length].startsWith("\""))
{
st[length] = st[length].substring(1, st[length].length());
}
if (st[length].endsWith("\""))
{
st[length] = st[length].substring(0, st[length].length() - 1);
}
再加上日期格式是dd-MM-yyyy;它被更改为dd/MM/yyy。现在我得到了正确的答案