問題:
1.new date() 得到的時間?和系統相差 相差8個小時
2.eclipse控制台列印的時間與系統相差 相差8個小時
3.log4j日志的時間與與系統相差 相差8個小時
上述問題其實是同一個問題。
解決方法如下:
1.在代碼前加上下面這句話就行了:timezone tz =timezone.gettimezone("asia/shanghai");timezone.setdefault(tz)
2.在tomcat中修改catalina.bat檔案的 set java_opts在後面加上-duser.timezone=gmt+08
3.修改系統資料庫中的預設時區改成(gmt+08:00) 北京,重慶,香港特别行政區,烏魯木齊
如果還不行看下:從正常的并且是相同系統的機器中導出hkey_local_machine\software\microsoft\windowsnt\currentversion\time zones 項,然後導入到自己機器中 。
以上三種方法都是解決方法。
在修改時區的時候最好用代碼看下java獲得的時區是什麼時區,代碼如下:
properties props=system.getproperties();
iteratoriter=props.keyset().iterator();
while(iter.hasnext())??stringkey=(string)iter.next();
system.out.println(key+" = "+props.get(key));
}
weblogic :
開始查找,資料庫時區,沒問題,伺服器系統時區,沒問題,
最終問題居然出在weblogic的時區上面...
weblogic是使用自帶的jre,而自帶的jre中預設的時區就是gmt,而中國标準時間大家都知道是gmt+8,網上有說去改weblogic自帶jre中的gmt檔案,把gmt8改成gmt,但總覺得這樣不是很好,如果有需要使用gmt标準時間的時候會有出問題的風險
于是從weblogic的啟動腳本上下手
修改 domians/project/bin/startweblogic.cmd
找到類似
xml代碼
set java_options=%java_options%
[xml] view plaincopy
在最後面加上 -duser.timezone=gmt+8 即設定時區為gmt+8 也可寫為 asia/shanghai
修改之後為
set java_options=%java_options% -duser.timezone=gmt+8
儲存,重新啟動weblogic,問題解決
檔案查找:startweblogic.cmd
find / -name mk/表示查找目錄,也可以具體到某個目錄以提高效率-name表示以檔案名查找
設定預設時區:
timezone tz =timezone.gettimezone("asia/shanghai");
timezone.setdefault(tz);
date date=new date();
string str=new simpledateformat("yyyy-mm-dd hh:mm:ss").format(date);
system.out.println(str);
設定時間格式的時區:
simpledateformat sdf=new simpledateformat("yyyy-mm-dd kk:mm:ss ");
sdf.settimezone(timezone.gettimezone("gmt+8"));
date d = new date();
system.out.println(sdf.format(d));
設定月曆的時區:
calendar now = calendar.getinstance();
now.settimezone(timezone.gettimezone("asia/shanghai"));//important
system.out.println(now.get(calendar.year));
system.out.println(now.get(calendar.month));
system.out.println(now.get(calendar.day_of_month));
system.out.println(now.get(calendar.hour_of_day));
設定時間格式的時區:
simpledateformat formatter = new simpledateformat("yyyy-mm-dd hh:mm:ss", locale.china);
formatter.settimezone(timezone.gettimezone("gmt+8"));
date currtime = new date();
string thistime = new string(formatter.format(currtime));
system.out.println("gmt+8:"+thistime);
系統時區:
string tzid = timezone.getdefault().getid();
system.out.println("timezone.getdefault().getid():"+tzid);
string zone = system.getproperty("user.timezone");
system.out.println("user.timezone:"+zone);
最新内容請見作者的github頁:http://qaseven.github.io/