具体说来就是:在数据库中,时间是1988/04/10 00:00:00,但是在kettle表输入控件中,无论是预览还是输出,都变成了:1988/04/1001:00:00,小时莫名的加多了一小时,但并不是所有的时间都被加1,也不是所有日期的0时都被加1,1988/04/11 00:00:00就是正常的,如下两图所示:
经过搜索,只搜到一篇关于此问题的叙述,截图如下:
虽然原文的问题表现形式和我遇到的不太一样,原文是减小了一个小时,而我遇到的是加多了一个小时,但解决办法是有效的。
即在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进行数据处理时,发现特定日期的0时被莫名加1小时。该问题与1986年至1990年中国实施的夏令时有关。通过修改kettle的启动参数设置时区为GMT+8解决了这一问题。
2539

被折叠的 条评论
为什么被折叠?



