最近做需求遇到一个问题,上游给了一个.dat 加密文件,解密后发现有个时间戳字段是用CST格式存储,举例:Thu Jul 22 00:58:32 CST 2010, 但是目标表字段数据类型设计成timestamp格式,要用Kettle 抽取数据,刚开始直接对这个字段数据类型转为 Date 类型,格式为 yyyy-MM-dd HH:mm:ss,经过反复测试发现不行。

于是另谋出路 能否用Kettle 中的 Java代码 和JavaScript 代码组件实现呢,摸索之后,最终采用

JavaScript组件实现。

数据源:

本次测试用date.csv文件作为数据源,csv文件存储的CST时间数据格式如下:

目标表:

PostgreSQL库创建目标表,用来接收。

create table t_string_conver_to_date(join_date timestamp without time zone );

ETL 程序设计程序

文本文件输入: 配置读取的文件为 date.csv,接收的字段IN_DATE,数据类型为String,注:这里不能设置为Date类型

JavaScript代码: 主要是将CST格式转换成yyyy-MM-dd HH:mm:ss格式。

//自定义函数
function dateFormat (date, format) {date = new Date(date);date.setHours(date.getHours()-14);var o = {'M+' : date.getMonth() + 1, //month'd+' : date.getDate(), //day'H+' : date.getHours(), //hour'm+' : date.getMinutes(), //minute's+' : date.getSeconds(), //second'q+' : Math.floor((date.getMonth() + 3) / 3), //quarter'S' : date.getMilliseconds() //millisecond};if (/(y+)/.test(format))format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp('(' + k + ')').test(format))format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length));return format;
}var DATE_OUT = dateFormat(IN_DATE,"yyyy-MM-dd HH:mm:ss")   //函数调用,输出字段资格,IN_DATE为文本文件传过来的数据流

设置如下,用DATE_OUT接收,类型为String。

 字段选择: 字段选择是将 DATE_OUT 强转为 DATE类型,并且格式为yyyy-MM-dd HH:mm:ss。

 表输出: 将DATE_OUT数据写入到目标表 t_string_conver_to_date.join_date 字段。

以上步骤都设置到了,启动Kettle 转换程序,然后查看表数据,验证OK。

[Kettle] CST时间格式转yyyy-MM-dd HH:mm:ss格式相关推荐

  1. Kettle5.2 couldn't convert string [...] to a date using format [yyyy/MM/dd HH:mm:ss.SSS]

    使用kettle出现 couldn't convert string [...] to a date using format [yyyy/MM/dd HH:mm:ss.SSS] 试了各种方法,最后发 ...

  2. 【怒怼老乔】苹果手机ios系统居然特喵的不支持日期yyyy-MM-dd HH:mm:ss.ms,只支持 yyyy/MM/dd HH:mm:ss

    苹果手机ios系统居然特喵的 不支持日期yyyy-MM-dd HH:mm:ss.ms, 只支持yyyy/MM/dd HH:mm:ss 我只能用 .replace(/\-/g,'\/'); 来替换掉了, ...

  3. C# 中的年月日时分秒 yyyy MM dd HH mm ss

    C# 中的年月日时分秒 yyyy MM dd HH mm ss 其中大小写含义不同,不能混用 年:yyyy 月:MM 日:dd(1-31) DD(0-365) 时:hh:12小时制 HH:24小时制 ...

  4. 时间格式区别之YYYY/MM/dd HH:mm 与 yyyy/MM/dd HH:mm

    1. 相应的业务场景 1.1 场景简介 正值2019年末,2020年初之际,系统日期时间为2019/12/31而系统报表却出现了2020/12/31的日期. 1.2 代码案例如下 2.Java中YYY ...

  5. spring boot + vue 前后端分离时间戳转换为 yyyy:MM:dd HH:mm:ss格式

    后端 1.model(entity)注释直接转换 当返回类型为resultMap,在entity类里面相应属性上加上以下注释 @JsonFormat(pattern="yyyy-MM-dd ...

  6. js时间格式化 YYYY/MM/DD HH:MM:SSS

    /*** 将"2018-05-19T08:04:52.000+0000"这种格式的时间转化为正常格式* @param time*/ function timeFormat(time ...

  7. 小程序日期格式(yyyy-MM-dd HH:mm:ss)转(yyyy/MM/dd HH:mm:ss)

    let newDate = (date).replace(/-/g, '/'); var date = new Date(newDate).getTime(); 转载于:https://www.cnb ...

  8. java 通配符 日期_java – 使用带有通配符支持的SimpleDateFormat解析日期字符串(例如* yyyy * MM * dd * hh * mm * ss)...

    首先,我想知道是否存在类似于SimpleDateFormat但是支持通配符的现有库?如果没有,最好的办法是什么? 我有这个问题,我需要匹配并从文件名中提取日期,但我似乎无法找到适合这种情况的方法.虽然 ...

  9. java date eee_java将 Date原始格式EEE MMM dd HH:mm:ss Z yyyy转成指定格式

    java将 Date原始格式"EEE MMM dd HH:mm:ss Z yyyy"转成指定格式 //将 Date原始格式"EEE MMM dd HH:mm:ss Z y ...

  10. 年月日格式判断-正则表达式 YYYY/MM/DD、YYYY/MM/DD| YY/MM/DD、 ^(^(\d{4}|\d{2})(\-|\/|\.)\d{1,2}\3\d{1,2}$)|(^\d{4}…

    一.简单的日期判断(YYYY/MM/DD): ^\d{4}(\-|\/|\.)\d{1,2}\1\d{1,2}$ 二.演化的日期判断(YYYY/MM/DD| YY/MM/DD): ^(^(\d{4}| ...

最新文章

  1. python3安装第三方库教程
  2. dubbo学习总结——思维导图
  3. django objects.filter().exists()
  4. vue中获取屏幕高度(封装使用)
  5. 超声波传感器测距原理
  6. Go语言实用用法大全
  7. 【xsy1061】排列 树状数组
  8. Java证书读取的两种方式
  9. 126邮件POP3,SMTP服务器与端口设置
  10. 使用python实现短信,邮箱的功能
  11. 鱼香肉丝里到底有没有鱼?
  12. 浏览器访问服务器的流程
  13. perl6中的q/qq/qx/qqx
  14. 使用STM32C103C8T6的注意点
  15. 如何使用Python进行异常检测?我来教你呀~
  16. ubuntu11.04下apache tftp以及ftp服务器的安装和基本配置
  17. Windows server2016离线安装.NET Farmwork3.5
  18. Oracle查询工资前三的员工信息
  19. SolidWorks画一个圆形凹槽
  20. 文件夹拒绝访问的原因与解决办法

热门文章

  1. Python中字典的近亲——集合
  2. Contextual Word Representations and Pretraining
  3. qq空间音乐查询API|经纬度查询API|手机归属地API|Taobao API接口调用实例
  4. Elasticsearch CCR 运作原理,以及如何在kibana上操作它
  5. html 文件上传与移除,WebUploader 解决文件屡次上传和删除上传文件的问题
  6. java 小球运动轨迹_Js实现简单的小球运动特效
  7. 云学习1 | 云计算与云服务类型了解
  8. 关于SEED-XDS560V2PLUS在Win10下驱动不能正常识别问题的解决
  9. 真假流量卡区别,一篇文章教你怎么区分流量卡和物联卡!
  10. jquery中append、prepend, before和after方法的区别