Talend tMap组件无法将字符串类型时间戳转换为日期问题咨询
Talend字符串Unix时间戳转日期解决方案
错误原因
你使用的日期解析格式完全不匹配输入值类型:你持有的"1631898440"是秒级Unix时间戳字符串,而非格式化的日期字符串,TalendDate.parseDate系列函数仅用于解析「带年月日时分秒格式的字符串」,无法直接识别时间戳数值。
正确转换逻辑
先将字符串转为Long类型数值,再转为Java Date对象即可,注意Java Date底层是毫秒级时间戳,10位秒级时间戳需要乘以1000转换。
tMap中直接使用如下表达式即可:
row5.mydatecolumn != null && !row5.mydatecolumn.trim().isEmpty() ? new Date(Long.parseLong(row5.mydatecolumn) * 1000) : null
额外说明
- 如果你的时间戳是13位毫秒级数值,去掉表达式中的
* 1000即可 - 转换为Date类型后如果需要输出为指定格式的字符串,可以嵌套
TalendDate.formatDate函数,示例:TalendDate.formatDate("yyyy-MM-dd HH:mm:ss", new Date(Long.parseLong(row5.mydatecolumn)*1000), "Asia/Shanghai")
两次报错的具体原因
- 第一次使用
TalendDate.parseDateLocale时指定的格式"EEE MMM dd HH:mm:ss zzz yyyy",要求输入是类似Wed Sep 15 12:27:20 CST 2021的英文格式化日期字符串,输入纯数字时间戳自然解析失败 - 第二次使用
"ddMMyyyy"格式时,会强制将10位数字按「前2位为日、中间2位为月、后4位为年」拆分,1631898440拆分后得到16日、31月、8984年,月份、年份均超出合法范围,因此触发时间戳越界报错
内容的提问来源于stack exchange,提问作者Amara
相关产品推荐
相关产品推荐

