2016-12-19 64 views
0

我輸入文件讀取:水槽攔截忽略輸入CSV文件頭,而讀

Name,Age,Date 
abc,26,2016-12-16 00:00:01 
pqr,25,2016-12-17 12:00:00 

我的輸出文件是:

Name,Age,Date 
ABC,26,2016-12-16 05:30:01 
PQR,25,2016-12-17 17:30:00 

我使用這樣的文件轉換和輸出文件移動水槽攔截。

我寫下面的邏輯。但有一個明顯的例外"Cannot parse Date".基本上,我不得不忽略輸入文件頭,例如Name,Age,Date。如何用我下面的代碼

 SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
     Date date =new Date(); 

     String line = new String(startEventBody); 


     String[] token = line.split(","); 
     date=a.parse(token[2]); 
     Calendar cal = Calendar.getInstance(); 
     cal.setTime(date); 
     cal.add(Calendar.HOUR_OF_DAY, 5); 
     cal.add(Calendar.MINUTE, 30); 


     String b = a.format(cal.getTime()).toString(); 

     token[0] = token[0].toUpperCase(); 
     token[2]=token[2].replace(token[2], b); 

     String newLine = ""; 
     for (String s : token) { 
      newLine += s + ","; 
     } 

     newLine = newLine.replaceAll("\\r\\n|\\r|\\n", ""); 

     this.outputStream = new ByteArrayOutputStream(newLine.getBytes().length); 

     this.outputStream.write(newLine.getBytes()); 


     return this.outputStream.toByteArray(); 

回答

0

實現這一點,你可以使用的DateFormat

.setLenient不留標題的第一行,你可以檢查日期格式的理智如下

... 

SimpleDateFormat a = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
a.setLenient(false); 
Date date =new Date(); 
String line = new String(startEventBody); 
String[] token = line.split(","); 
if(a.parse(token[2], new ParsePosition(0)) != null){ 
    date = a.parse(token[2]); 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    cal.add(Calendar.HOUR_OF_DAY, 5); 
    cal.add(Calendar.MINUTE, 30); 
    token[2] = a.format(cal.getTime()).toString(); //rewrites new date string to token[2] 
} 

token[0] = token[0].toUpperCase(); 

... 

注意:當然你也可以檢查StringDate而不是DateFormat

+0

完美。非常感謝... – earl