Java 无法使用jexcel api将字符串解析为日期

Java 无法使用jexcel api将字符串解析为日期,java,jexcelapi,Java,Jexcelapi,我面临着几天前遇到的一个问题。我必须解析这个文件并将字符串转换为日期。几天前,我对另一个CSV文件也做了同样的操作。但是,新文件出现以下错误:java.text.ParseException:不可解析日期:“2011年3月4日” 为什么字符串周围打印有两个“”呢?我认为这是问题的根本原因。我把代码贴在下面。请注意,同样的代码适用于另一个文件,其中日期打印为2011年3月4日,周围没有“”字样 WritableWorkbook wbwrite=null; WritableShe

我面临着几天前遇到的一个问题。我必须解析这个文件并将字符串转换为日期。几天前,我对另一个CSV文件也做了同样的操作。但是,新文件出现以下错误:java.text.ParseException:不可解析日期:“2011年3月4日”

为什么字符串周围打印有两个“”呢?我认为这是问题的根本原因。我把代码贴在下面。请注意,同样的代码适用于另一个文件,其中日期打印为2011年3月4日,周围没有“”字样

     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。现在我得到了正确的答案