Java日志时间与Linux系统时间相差一小时解决方案一、分析2007年10月分,夏令时曾经做更改,2007年与之前发布的jdk版本均有此问题,2007年后发布的jdk版本不会出现此bug。一线版本jdk为1.5是2004年发布在10.78.228.102上已测试通过,时区更新工具在文档的最后。参考资料:时区更新下载:二、描述模拟一线的情况成功,与一线的情况相同,在入夏令时和出夏令时会出现时间不能自动调整的问题。三、解决步骤1、修改时区文件使用root用户更改/etc/sysconfig/clockTIMEZONE=Asia/TehranUTC=yesDEFAULT_TIMEZONE=Asia/Tehran文件描述:TIMEZONE=Asia/Tehran表示时区设置为Iran的时区UTC=yes表示启用UTC时间,这样jdk才可以从系统获取正确的时间,必须启用DEFAULT_TIMEZONE=Asia/Tehran默认时区2、更新jdk时区信息使用tzupdate.jar更新jdk的时区信息,注意此时必须要停止所有可能使用jdk的进程,否则会导致升级失败,建议重启系统后升级,保证升级成功1、下载tzupdate.jar到系统中2、解压tzupdate.jarunziptzupdater-1_3_42-2011k.zip3、验证版本信息(注意大小写)java-jartzupdate.jar–V如果输出:TheJavaruntimedoesn''thavetimezonedata(zidirectory).或者tzupdaterversion1.3.42-b02JREtimezonedataversion:tzdata2005iEmbeddedtimezonedataversion:tzdata2011kJREtimezonedata的版本是2007以前的,则表示时区信息没有升级到最新,可以继续升级操作4、升级jdk时区信息java-jartzupdate.jar–u没有任何输出则升级成功5、测试升级是否成功,无任何输出则升级成功java-jartzupdate.jar–t没有任何输出,则zonedata文件验证通过6、可检查升级后时区版本java-jartzupdate.jar–V输出tzupdaterversion1.3.42-b02JREtimezonedataversion:tzdata2011kEmbeddedtimezonedataversion:tzdata2011k则表示升级成功。3.保证以上步骤没有错误后,调整系统时间,重启操作系统,启动MOS5200系统。检查日志是否与操作系统时间一致。如果时间一致,升级成功。升级碰到的一些问题1.升级后验证版本时输出tzupdaterversion1.3.42-b02JREtimezonedataversion:tzdata2005iThere'snotzdataavailableforthisJavaruntime.而前面操作没有报错,这是因为你的jdk还有进程在访问,导致升级失败,重启操作系统后执行之前操作就可以升级成功了。2.升级后系统时间跟日志时间相差3:30因为jdk没有获取到正确的时区信息,给jboss的启动文件/opt/netwatcher/pm4h2/app/opt/jboss-report/bin/run.sh中添加启动参数setJAVA_OPTS=%JAVA_OPTS%-Dprogram.name=%PROGNAME%-Duser.timezone=Asia/Tehran具体位置加在62行左右,不能再if分支里,保证run.sh一定会执行这句。重启web容器后就可以获取到正确时区,日志时间会跟随夏令时一起跳变。3.测试时输出TheJavaruntimedoesn''thavetimezonedata(zidirectory).表示没有升级上去。