时间分为两种,系统时间和本地时间,系统时间全世界的计算机都一样,本地时间要计算时差。我们进行输出时间之类的操作,都是输出本地时间。但是我们new Date传入参数,或者是进行其他与起始时间(1970年1月1日,0点0分0秒)相关的操作时,操作的时系统时间,输出的确实本地时间。就会出现下面这种情况:

Date d=new Date(0);//在起始时间上加0毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String s=sdf.format(d);
System.out.println(s);//结果为1970-01-01 08:00:00

可以发现起始时间时8点,是因为我们中国属于东八区,有时差,我们可以通过SimpleDateFormat的父类DateFormat的方法setTimeZone()方法来设置时区,setTimeZone()接受一个TimeZone值,用来设置相应时区,TimeZone类又有一个getTimeZone()方法来获取参数代表的时区。可以通过传入不同参数来得到不同时区。

Date d=new Date(0);//在起始时间上加0毫秒
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
TimeZone zone = TimeZone.getTimeZone("GMT");//GMT是格林威治时间,也就是世界时
sdf.setTimeZone(zone);//设置时区
String s=sdf.format(d);
System.out.println(s);//输出1970-01-01 00:00:00

系统时间其实就是按照格林威治时间算的,所以可以直接传入"GTM"来调整时差当然还可以传入其他参数.

TimeZone.getTimeZone("Asia/Chongqing");//,亚洲重庆,时差8小时,输出1970-01-01 08:00:00
TimeZone.getTimeZone("Asia/Tokyo");//亚洲日本,时差9小时,输出1970-01-01 09:00:00
TimeZone.getTimeZone("GMT+1");//输出1970-01-01 01:00:00,直接世界时上加一小时

除了上面几种设置地区的方式,还有其他方式。就不展开了.

09-26 00:21