java获得windows系统时间有误的解决方案

 

java获得windows系统时间有误的解决方案

      今天遇到了一个很奇怪的问题,就是利用获取系统当前时间的时候,总是与实际的时间相差8个小时,十分郁闷。

       无论是使用

                 Calendar c=Calendar.getInstance();
                  SimpleDateFormat f=new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
                 System.out.println(f.format(c.getTime()));

       还是使用

                  String pattern = "yyyy-MM-DD HH:mm:ss";
                  SimpleDateFormat df = new SimpleDateFormat(pattern);
                 Date today = new Date();
                  System.out.println(df.format(today));

       获得的时间都是与windows系统的时间相差8个小时,后来通过查阅相关资料,是由于我在获取时间的时候没有指定时区,于是设置了一下,哈哈,终于解决了!

       解决方法有两个,分别是:

       方法一:                   

public String getFormatedDateString(int timeZoneOffset)
        
if (timeZoneOffset > 13 || timeZoneOffset < -12) {
             timeZoneOffset = 0;
         }
         TimeZone timeZone;
         String[] ids = TimeZone.getAvailableIDs(timeZoneOffset * 60 * 60 * 1000);
        
if (ids.length == 0) {
            
// if no ids were returned, something is wrong. use default TimeZone
             timeZone = TimeZone.getDefault();
         }
else {
             timeZone =
new SimpleTimeZone(timeZoneOffset * 60 * 60 * 1000, ids[0]);
         }

         SimpleDateFormat sdf =
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         sdf.setTimeZone(timeZone);
        
return sdf.format(newDate);
     }

 

方法中参数timeZoneOffset表示时区,如中国一般使用东八区,因此timeZoneOffset就是8,如果是西四区就是传入-4就可以了!

 

 

      方法二:

public String getFormatedDateString(){
   java.util.TimeZone timeZone = java.util.TimeZone.getTimeZone("Asia/Shanghai");

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH时mm分ss秒");
     sdf.setTimeZone(timeZone);

     return sdf.format(new Date());
}

 

此方法返回的是中国的北京时间,如果是其它国家的时间可以在TimeZone的getTimeZone方法中设置不同的时区,如:

                TimeZone tzCN = TimeZone.getDefault();

                TimeZone.getTimeZone("Asia/Shanghai");
TimeZone tzJP = TimeZone.getTimeZone("Japan");
TimeZone tzES = TimeZone.getTimeZone("Europe/Madrid");
TimeZone tzES2 = TimeZone.getTimeZone("GMT+1:00");

http://hi.baidu.com/flingsnow0907/blog/item/6ed2ee885aca9091a5c272f6.html

 

 

 

以下是我的解决办法:

Java代码 复制代码
  1. timeZone_digital = new Date();.getTimezoneOffset(); 得到时区时间差值   
  2.   
  3. 以上是JS得到的    
  4.     public static TimeZone getTimeZone(String timeZone_digital); {   
  5.         String gmt = "";   
  6.         if (timeZone_digital != null); {   
  7.             int length = timeZone_digital.length();;   
  8.             String d = "";   
  9.             String f = "";   
  10.             if (length == 1); {   
  11.                 gmt = "GMT";   
  12.             } else if (timeZone_digital.startsWith("-");); {   
  13.                 d = timeZone_digital.substring(01);;   
  14.                 f = timeZone_digital.substring(1, length);;   
  15.                 gmt = "GMT+" + Integer.parseInt(f); / 60;   
  16.             } else {   
  17.                 gmt = "GMT-" + Integer.parseInt(timeZone_digital); / 60;   
  18.             }   
  19.   
  20.         } else {   
  21.             // 北京时区   
  22.             return TimeZone.getTimeZone("GMT+8");;   
  23.         }   
  24.   
  25.         return TimeZone.getTimeZone(gmt);;   
  26.     }  
timeZone_digital = new Date();.getTimezoneOffset(); 得到时区时间差值

以上是JS得到的 
	public static TimeZone getTimeZone(String timeZone_digital); {
		String gmt = "";
		if (timeZone_digital != null); {
			int length = timeZone_digital.length();;
			String d = "";
			String f = "";
			if (length == 1); {
				gmt = "GMT";
			} else if (timeZone_digital.startsWith("-");); {
				d = timeZone_digital.substring(0, 1);;
				f = timeZone_digital.substring(1, length);;
				gmt = "GMT+" + Integer.parseInt(f); / 60;
			} else {
				gmt = "GMT-" + Integer.parseInt(timeZone_digital); / 60;
			}

		} else {
			// 北京时区
			return TimeZone.getTimeZone("GMT+8");;
		}

		return TimeZone.getTimeZone(gmt);;
	}



这样就得到时区  TimeZone 了
接下就好办了

Locale default_locale = Locale.SIMPLIFIED_CHINESE;
SimpleDateFormat cnF = new SimpleDateFormat( "yyyy-mm-dd hh:mm", default_locale);

就可以任意转了

http://www.javaeye.com/topic/13720

 

造成这种问题的原因可能是:你的操作系统时区跟你JVM的时区不一致。

你的操作系统应该是中国的时区吧,而JVM的时区不一定是中国时区,你在应用服务器的Java虚拟机添加如下配置: 
-Dfile.encoding=UTF8     -Duser.timezone=GMT+08  [博主评:这招比较方便又管用]

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值