问题描述
大家帮帮忙啊,我在做日志的时候,取出系统时间,但是时间总比本机显示时间早8个小时。想到是不是默认时区有问题,随后写方法修改默认时区,代码如下:publicstaticvoidmain(String[]args){TimeZonetz=TimeZone.getTimeZone("ETC/GMT-8");TimeZone.setDefault(tz);}
运行依旧不对,查看系统信息:publicstaticvoidmain(String[]args){Propertiesprops=System.getProperties();Iteratoriter=props.keySet().iterator();while(iter.hasNext()){Stringkey=(String)iter.next();System.out.println(key+"="+props.get(key));}}
信息显示:user.timezone=这是怎么回事啊??高手帮忙解答下吧!谢谢大家了!环境:win7旗舰+tomcat5.5+JDK1.5开发机:thinkpadT410环境变量设置没有问题,java,javac,java-version命令正常显示
解决方案
本帖最后由 marszhc 于 2010-12-02 12:03:12 编辑
解决方案二:
这个真没有遇见过
解决方案三:
引用楼主marszhc的回复:
大家帮帮忙啊,我在做日志的时候,取出系统时间,但是时间总比本机显示时间早8个小时。想到是不是默认时区有问题,随后写方法修改默认时区,代码如下:
默认时区对Date对象没有影响。这个就看日志打印的时候是怎么打印的了,直接打Date则你的努力是白费的。得从日志那边的配置下手。
解决方案四:
toLocal方法
解决方案五:
TimeZonechina=TimeZone.getTimeZone("GMT+08:00");Calendarcal=Calendar.getInstance(china);System.out.println("北京时间"+cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DAY_OF_MONTH)+""+Calendar.HOUR_OF_DAY+":"+Calendar.MINUTE+":"+cal.get(Calendar.SECOND));
为什么不用date,用区偏移量来算时间?
解决方案六:
这个是我取出当前时间的方法,看看有问题吗?Calendarcalendar=Calendar.getInstance();StringNowYear=Integer.toString(calendar.get(Calendar.YEAR));StringNowMonth=Integer.toString((calendar.get(Calendar.MONTH)+1));StringNowDay=Integer.toString(calendar.get(Calendar.DAY_OF_MONTH));StringNowHour=Integer.toString(calendar.get(Calendar.HOUR_OF_DAY));StringNowMinute=Integer.toString(calendar.get(Calendar.MINUTE));StringNowDate=NowYear+"-"+(NowMonth.length()==1?"0"+NowMonth:NowMonth)+"-"+(NowDay.length()==1?"0"+NowDay:NowDay)+""+(NowHour.length()==1?"0"+NowHour:NowHour)+":"+(NowMinute.length()==1?"0"+NowMinute:NowMinute);returnNowDate;
解决方案七:
引用5楼marszhc的回复:
这个是我取出当前时间的方法,看看有问题吗?JavacodeCalendarcalendar=Calendar.getInstance();StringNowYear=Integer.toString(calendar.get(Calendar.YEAR));StringNowMonth=Integer.toString((cale……
你这个代码对TimeZone.setDefault是敏感的,是不是可以注意这几点:1.将调整TimeZone的代码直接加到这边2.你说的早8个小时是什么意思,是不是要改成GMT/GMT-8等?试试看?
解决方案八:
为什么我运行是正确的呢
解决方案九:
如果是jdk1.5的话,那用java-version看一下java的版本号,根据Sun提供的资料,对应于Windows系统,JDK1.5最小的版本号:Windows7,Windows2008R2,WindowsVistaSP2,Windows2008SP2需要1.5.0_21及以后版本Windows2008需要1.5.0_19及以后版本WindowsVista需要1.5.0_14及以后版本JDK1.6系统支持最小的版本号Windows7需要1.6.0_14及以后版本WindowsServer2008R2需要1.6.0_16及以后版本你检查一下JDK的版本,JDK5的输出结果必须是大于等于1.5.0_21的。如果不是的话,重新安装最新版本的JDK
解决方案十:
否则的话读取操作系统的时区会有问题。
解决方案十一:
楼主你走运了,我也遇到过这种问题,网上查过没有什么好的答案,后来发现是自己修改过电脑的时间的那个时间分隔符我该成了“是SB”然后和同学聊天,就会显示xxx是SB+当前时间(正常情况是xxx+时间)+聊天内容当时纯属恶搞后来把那个该了就好了lz试一试把
解决方案十二:
staticvoidgetTime(){TimeZonetz=TimeZone.getDefault();Calendarcal=Calendar.getInstance(tz,Locale.CHINA);intyear=cal.get(Calendar.YEAR);intmonth=cal.get(Calendar.MONTH);intdate=cal.get(Calendar.DAY_OF_MONTH);intweek=cal.get(Calendar.DAY_OF_WEEK_IN_MONTH);intweekday=cal.get(Calendar.DAY_OF_WEEK);inthour=cal.get(Calendar.HOUR_OF_DAY);intminute=cal.get(Calendar.MINUTE);intsecond=cal.get(Calendar.SECOND);StringnowTime=year+"年"+(month+1)+"月"+(date)+"日"+"第"+week+"个星期"+"周"+(weekday-1)+"时间:"+hour+"-"+minute+"-"+second;System.out.println(nowTime);}
楼主试验下?
解决方案十三:
不用default的解决中国北京的GMT应该是TimeZonetz=TimeZone.getTimeZone("GMT+8");Calendarcal=Calendar.getInstance(tz,Locale.CHINA);