使用 talend open studio 解析日期会引发错误
parsing date with talend open studio throws an error
我需要在 talend open studio 作业中从以下字符串中解析第一个日期:
Report für Benutzerdefiniert Von: 11.10.2016 01:00:00 Bis: 12.10.2016 01:00:00
我构建了以下表达式,该表达式在 tjavarow 组件中用于将日期设置为全局变量:
output_row.Datum = TalendDate.parseDate("dd.MM.yyyy",StringHandling.LEFT(StringHandling.FTRIM(StringHandling.EREPLACE(input_row.Column0,"Report für Benutzerdefiniert Von: ","")),11));
globalMap.put("datum",output_row.Datum);
但我只得到这个错误:
Exception in component tJavaRow_2
java.lang.RuntimeException: java.text.ParseException: Unparseable date: "11.10.2016"
at routines.TalendDate.parseDate(TalendDate.java:895)
at routines.TalendDate.parseDate(TalendDate.java:839)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.tFileInputDelimited_3Process(xxxx_LoginTImes_CSV_to_DB.java:3184)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.tJavaRow_1_error(xxxx_LoginTImes_CSV_to_DB.java:412)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB$TalendException.printStackTrace(xxxx_LoginTImes_CSV_to_DB.java:355)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.runJobInTOS(xxxx_LoginTImes_CSV_to_DB.java:10195)
at xxx.xxxxxx_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.main(xxxx_xxxxx_CSV_to_DB.java:9946)
Caused by: java.text.ParseException: Unparseable date: "11.10.2016"
at java.text.DateFormat.parse(DateFormat.java:366)
at routines.TalendDate.parseDate(TalendDate.java:881)
... 10 more
我的解析日期有什么问题 TalendDate.parseDate("dd.MM.yyyy",...)
感恩
基督徒
括号数可能有误:第一行')'太多了,第二行多了2个。
此外,在 tJavaRow 中,该行应命名为 "input_row.Column0" 而不是 "row5.Column0"。
如果你想使用"row5",你应该尝试把这个表达式放在一个tMap
问题是一个不可见的字符。
在以下情况下工作正常:
output_row.datum = TalendDate.parseDate("dd.MM.yyyy",StringHandling.TRIM(StringHandling.RIGHT(StringHandling.LEFT(StringHandling.EREPLACE(input_row.Column0,"Report für Benutzerdefiniert Von: ",""),11),10)));
你可以看看我是怎么想出来的:https://www.talendforge.org/forum/viewtopic.php?pid=193560#p193560
但如果有更好的解决方案请告诉我:)
我需要在 talend open studio 作业中从以下字符串中解析第一个日期:
Report für Benutzerdefiniert Von: 11.10.2016 01:00:00 Bis: 12.10.2016 01:00:00
我构建了以下表达式,该表达式在 tjavarow 组件中用于将日期设置为全局变量:
output_row.Datum = TalendDate.parseDate("dd.MM.yyyy",StringHandling.LEFT(StringHandling.FTRIM(StringHandling.EREPLACE(input_row.Column0,"Report für Benutzerdefiniert Von: ","")),11));
globalMap.put("datum",output_row.Datum);
但我只得到这个错误:
Exception in component tJavaRow_2
java.lang.RuntimeException: java.text.ParseException: Unparseable date: "11.10.2016"
at routines.TalendDate.parseDate(TalendDate.java:895)
at routines.TalendDate.parseDate(TalendDate.java:839)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.tFileInputDelimited_3Process(xxxx_LoginTImes_CSV_to_DB.java:3184)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.tJavaRow_1_error(xxxx_LoginTImes_CSV_to_DB.java:412)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB$TalendException.printStackTrace(xxxx_LoginTImes_CSV_to_DB.java:355)
at ec_bi.xxxx_logintimes_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.runJobInTOS(xxxx_LoginTImes_CSV_to_DB.java:10195)
at xxx.xxxxxx_csv_to_db_0_1.xxxx_LoginTImes_CSV_to_DB.main(xxxx_xxxxx_CSV_to_DB.java:9946)
Caused by: java.text.ParseException: Unparseable date: "11.10.2016"
at java.text.DateFormat.parse(DateFormat.java:366)
at routines.TalendDate.parseDate(TalendDate.java:881)
... 10 more
我的解析日期有什么问题 TalendDate.parseDate("dd.MM.yyyy",...)
感恩
基督徒
括号数可能有误:第一行')'太多了,第二行多了2个。 此外,在 tJavaRow 中,该行应命名为 "input_row.Column0" 而不是 "row5.Column0"。 如果你想使用"row5",你应该尝试把这个表达式放在一个tMap
问题是一个不可见的字符。
在以下情况下工作正常:
output_row.datum = TalendDate.parseDate("dd.MM.yyyy",StringHandling.TRIM(StringHandling.RIGHT(StringHandling.LEFT(StringHandling.EREPLACE(input_row.Column0,"Report für Benutzerdefiniert Von: ",""),11),10)));
你可以看看我是怎么想出来的:https://www.talendforge.org/forum/viewtopic.php?pid=193560#p193560
但如果有更好的解决方案请告诉我:)