Talend日期和时间相结合

时间:2017-07-12 09:49:27

标签: date time concatenation talend unparseable

我合并了两列;日期和时间。当我传递日期和时间热编码它工作正常,但当我通过列传递它时会抛出错误:

  

无法解释的日期:" 05/05 / 1992"

我已经尝试过了:

MaterialCodeCSV.xdate == null ? 
TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", TalendDate.getDate("yyyy-MM-dd HH:mm:ss")) : 
TalendDate.parseDateLocale("yyyy/mm/dd HH:mm:ss",MaterialCodeCSV.xdate.toString() +  MaterialCodeCSV.xtime.toString(),"EN"); 

Talend中的Java代码:

Java code in Talend

1 个答案:

答案 0 :(得分:0)

如果使用错误的数据类型,日期处理可能有点棘手。我假设您要填充Date字段。这种方式有几个错误:

MaterialCodeCSV.xdate == null ? 
TalendDate.parseDate("yyyy-MM-dd HH:mm:ss", TalendDate.getDate("yyyy-MM-dd HH:mm:ss")) : 
TalendDate.parseDateLocale("yyyy/mm/dd H:mm:ss",MaterialCodeCSV.xdate.toString()+ MaterialCodeCSV.xtime.toString(),"EN");
  • 如果MaterialCodeCSV.xdate == null您创建了一个日期并立即再次解析它?这似乎是不必要的复杂和低效的。将其更改为TalendDate.getCurrentDate()
  • 如果xdate不为空,则只需连结xdatextime,使用toString()并尝试解析此问题。再次,这似乎是不必要的复杂。如果我现在假设xdatextime已经是Date字段,您可以将其写为:MaterialCodeCSV.xdate + MaterialCodeCSV.xtime
  • 如果两者都是String字段,则 以确保xdate的格式为yyyy/MM/ddxtimeHH:mm:ss 。然后,您可以排除.toString()
  • 此外,如果两者都是String字段,则必须添加额外的空格:MaterialCodeCSV.xdate + ' ' + MaterialCodeCSV.xtime
  • 此外,在第一种情况下,您使用yyyy-MM-dd HH:mm:ss进行解析。在第二种情况下,您使用yyyy/mm/dd H:mm:ss进行解析。这读取"年/分/天"。此外,只有一个小时的数字,在9:59:59之后不允许任何时间进行解析。正确地说,你应该使用yyyy/MM/dd HH:mm:ss

所以总结它应该是这样的(如果我假设正确并且您使用了Stringxdate的格式正确的xtime字段:

MaterialCodeCSV.xdate == null ? 
TalendDate.getCurrentDate() : 
TalendDate.parseDateLocale("yyyy/MM/dd HH:mm:ss", MaterialCodeCSV.xdate + ' ' + MaterialCodeCSV.xtime,"EN");