解决Java new Date() 获取的时间不正确

一、使用TimeZone 设置时区
System.out.println("原时间 " + new Date());

TimeZone time = TimeZone.getTimeZone("ETC/GMT-8");

TimeZone.setDefault(time);

System.out.println("修改后时间 " + new Date());


//显示Java能识别的系统中所有正确的时区
String[] ids = TimeZone.getAvailableIDs();
for(int i = 0; i < ids.length; i++)
    System.out.println(ids[i].toString());

二、TimeZone 方法

S.N. 方法 & 描述
1. Object clone() 
此方法返回当前的SimpleTimeZone实例的一个副本。
2. boolean equals(Object obj) 
此方法比较两个的SimpleTimeZone对象是否相等。
3. int getDSTSavings() 
此方法返回以毫秒为单位的时钟是在夏令时提前的时间量。
4.
int getOffset(int era, int year, int month, int day, int dayOfWeek, int millis) 
此方法返回本地时间与UTC之间以毫秒为单位的差异,同时考虑到原始偏移量和夏令时的效果,对于指定的日期和时间。 5. int getOffset(long date) 
此方法返回当前时区从UTC偏移量在给定的时间。6. int getRawOffset() 
此方法获取GMT这个时区偏移量。7. int hashCode() 
此方法生成SimpleDateFormat对象的哈希代码。8. boolean hasSameRules(TimeZone other) 
如果此区域具有相同的规则和偏移量为另一个区域,此方法返回true。9. boolean inDaylightTime(Date date) 
此方法查询,如果给定的日期是在夏令时。10. void setDSTSavings(int millisSavedDuringDST) 
此方法以毫秒为单位的时钟是在夏令时提前设定的时间量。11. void setEndRule(int endMonth, int endDay, int endTime) 
此方法设置夏令时结束规则设置为某个月份的固定日期。12. void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime) 
此方法设置夏令时结束规则。13. void setEndRule(int endMonth, int endDay, int endDayOfWeek, int endTime, boolean after) 
此方法设置夏令时结束规则到平日在一个月内给定日期之前或之后,如第一个星期一或以后的第8位。14. void setRawOffset(int offsetMillis) 
此方法设置的基准时区偏移为GMT。15. void setStartRule(int startMonth, int startDay, int startTime) 
此方法设置夏令时开始规则设置为某个月份的固定日期。16. void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime) 
此方法设置夏令时开始规则。17. void setStartRule(int startMonth, int startDay, int startDayOfWeek, int startTime, boolean after) 
此方法之前或之后指定的日期在一个月之内,例如,在第一个星期一或以后的第8位。设置夏令时开始规则工作日18. void setStartYear(int year) 
此方法设置夏令时的开始年份。19. String toString() 
此方法返回当前时区的字符串表示形式。20. boolean useDaylightTime() 
此方法查询,如果此时区使用夏令时。

你可能感兴趣的:(Java)