【问题标题】:Talend date and time combineTalend 日期和时间组合
【发布时间】:2017-07-12 09:49:26
【问题描述】:

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

无法解析的日期:“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 代码:

【问题讨论】:

  • “MaterialCodeCSV.xtime”列中的所有日期是否都具有相同的格式“01/01/2000”?列的类型是什么?

标签: date time concatenation talend unparseable


【解决方案1】:

如果使用错误的数据类型,日期处理可能会有点棘手。我假设你想填写一个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/dd,而xtime 的格式为HH: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

所以总结它应该看起来像这样(如果我假设正确并且您使用正确格式的String 字段用于xdatextime):

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

【讨论】:

  • 非常感谢您的简短解释,非常有帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
相关资源
最近更新 更多