kettle之时间转换异常

昨天在进行数据抽取时,发现了一个很奇怪的现象,部分时间,在经过kettle表输入再输出时,发生了变化。
具体说来就是:在数据库中,时间是1988/04/10 00:00:00,但是在kettle表输入控件中,无论是预览还是输出,都变成了:1988/04/1001:00:00,小时莫名的加多了一小时,但并不是所有的时间都被加1,也不是所有日期的0时都被加1,1988/04/11 00:00:00就是正常的,如下两图所示:

kettle之时间转换异常_第1张图片
kettle之时间转换异常_第2张图片

经过定义错误处理,将有问题的时间输出,基本上都是几个特定的时间:1988/04/10 00:00:00、1987/04/12 00:00:00、1989/04/16 00:00:00、1990/04/15 00:00:00

经过搜索,只搜到一篇关于此问题的叙述,截图如下:
kettle之时间转换异常_第3张图片


虽然原文的问题表现形式和我遇到的不太一样,原文是减小了一个小时,而我遇到的是加多了一个小时,但解决办法是有效的。
即在kitchen.bat和spoon.bat中的OPT变量中添加一段代码:"-Duser.timezone="GMT+8""  ,注意包含引号
在新版本的kettle中(5.4),kitchen.bat无需添加,因为新版本的kitchen.bat是调用的spoon.bat。

原因分析:相关资料显示,1986到1990年,我国实行了一段时间的夏令时,但是根据当时的规则我国当时的夏令时间调整是在凌晨2时,将时间调快一小时,即将:1986-05-04 02:00:00调整为1986-05-04 03:00:00,而时间测试的效果却是:1986-05-04 00:00:00调整为1986-05-04 01:00:00。而且kettle中,也没有在1986年9月14日将时间调整回来。而且如果按照夏令时制规则,5月4日后,每个小时都应该+1,直至夏令结束,而不是只加0点那一个小时。
然而,kettle中出现问题的日期又与我国实行夏令时制的时间想吻合,(解放前也有实行年份)。
最后猜测,可能是kettle的源码中,对这结果日期的0点进行了特殊处理,但是又没有按照当时实行夏令时制的规则来处理。所以造成了这样的问题。当然这只是臆测,也不一定对,我也不动java,看不了源码。
好在还有解决的办法。


你可能感兴趣的:(kettle)