天天看點

java 獲得的系統時間與作業系統的時間不一緻

問題:

  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/