我的输入文件为:
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
我正在使用FLUME-INTERCEPTOR进行此文件转换和输出文件移动。
我写了下面的逻辑。但是有一个明显的异常"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 :(得分:1)
您可以使用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();
...
注意:当然,您也可以检查String
Date
而不是DateFormat
。