2016-05-04 9 views
1

Ich lese eine .xlsx-Datei und einen Datumswert abrufen und es sollte in ein Textfeld Feld eingegeben werden.Wie konvertiert man das Datumsformat vom 04. Mai 2016 bis 04/05/2016 mit Java Apache POI

In Excel ist der Zellenwert 04/05/2016.

Aber beim Abrufen des Datumswerts aus der Zelle wird der Wert 04-May-2016.

Wie konvertiere ich dieses 04-Mai-2016 Format in mm/dd/yyy.

Code:

public static String readExcel(String filePath,String fileName,String sheetName,int RowNumber,int ColNumber) throws Exception{ 

    Object result = null; 
    try 
    { 

     sheet=getSheet(filePath, fileName, sheetName); 
     row=sheet.getRow(RowNumber); 

     if(row != null) 
     { 
      //System.out.println("Row is not empty"); 
      cell= row.getCell(ColNumber); 

      if(cell!=null) 
      { 
       switch (cell.getCellType()) { 

       case Cell.CELL_TYPE_NUMERIC:// numeric value in excel 
        if(DateUtil.isCellDateFormatted(cell)){ 
         //DateUtil.truncate(new Date(), java.util.Calendar.DAY_OF_MONTH); 

         DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
         result = formatter.format(cell); 
         System.out.println("Today : " + result);  
        } 
        else{ 
         result = new BigDecimal(cell.getNumericCellValue()).toPlainString(); 
        } 
        break; 

       case Cell.CELL_TYPE_STRING: // string value in excel 
        result = cell.getStringCellValue(); 
        break; 

       case Cell.CELL_TYPE_BOOLEAN: // boolean value in excel 
        result = cell.getBooleanCellValue(); 
        break; 

       case Cell.CELL_TYPE_BLANK: // blank value in excel 
        result = cell.getStringCellValue(); 
        break; 

       case Cell.CELL_TYPE_ERROR: // Error value in excel 
        result = cell.getErrorCellValue()+""; 
        break; 


       } 
      } 
      else 
      { 
       return null; 
      } 
     } 
     else 
     { 
      //System.out.println("Row is empty"); 
      return null; 
     } 

     inputStream.close(); 
    } 

    catch (Exception ex){ 
     ex.printStackTrace(); 
     } 

    return result.toString(); 

} 

Console:

java.lang.IllegalArgumentException: Cannot format given Object as a Date 
    at java.text.DateFormat.format(Unknown Source) 
    at java.text.Format.format(Unknown Source) 
    at utility.ExcelUtility.readExcel(ExcelUtility.java:116) 

mich Führer zu erreichen.

+2

warum verwenden Sie nicht 'SimpleDateFormat'? –

+0

Ja, ich benutze nur das ** SimpleDateFormat ** und bekomme die Ausnahme, da das Format nicht konvertiert werden kann. –

Antwort

3

das Datum erhalten, Sie

Date myDate = cell.getDateCellValue() 

tun können und dann wie Simple Ihr Beispiel verwenden:

if(DateUtil.isCellDateFormatted(cell)){ 
    Date myDate = cell.getDateCellValue(); 
    DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); 
    String result = formatter.format(myDate); 
    System.out.println("Today : " + result);  
} 
+0

Warum verwenden Sie 'myDate' nicht in' result = formatter.format (myDate); '? Stattdessen verwenden Sie 'cell', was zu' cell.toString() 'führt, was zu dem gleichen Fehler führt, den @Ashok kumar bereits hat. –

+0

Mein Fehler, mein Punkt war eher auf dem Weg, das Datum zu bekommen, als ein dateFormat zu machen. Ich korrigiere es. – Akah

+0

@Akah Ok, korrigieren Sie es. Ich werde es benutzen. –

0

Sie das Datum als String in dem Dateibereich nehmen. Mein Leser gefällt das.

switch (cell.getCellType()) { 
       case Cell.CELL_TYPE_NUMERIC: 
        cellValue = String.valueOf((long) cell.getNumericCellValue()); 
        break; 
       case Cell.CELL_TYPE_STRING: 
        cellValue = cell.getStringCellValue(); 
        break; 
       } 

Dann Parsen Sie Zeichenfolge mit SimpleDateFormat.

Mein Formatierer;

public final static DateFormat BIRTHDAY_FORMATTER = new SimpleDateFormat("myPatterns"); 

und Datum;

Date date = BIRTHDAY_FORMATTER.parse(myCellValue);