使用 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(String‌​Handling.FTRIM(Strin‌​gHandling.EREPLACE(i‌​nput_row.Column0,"Re‌​port 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

但如果有更好的解决方案请告诉我:)