描述:用户在美国时间下午四点收到了一封写着美国时间下午十一点的通知邮件。
原因:SimpleDateFormat需要设置时区,因为公司代码中获取Date的方式是一个公共方法,所以直接使用,但是没有想到格式转换的时候Calendar的时区并没有什么作用,导致转换出来的时间其实是系统时间(服务器使用了标准时间),所以收到了内容中时间为8小时之后的时间
写了一个小demo,代码:
TimeZone LATimezone = TimeZone.getTimeZone("America/Los_Angeles");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm MM/dd/yyyy");
SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("HH:mm MM/dd/yyyy");
//此处设置时区
simpleDateFormat2.setTimeZone(LATimezone);
Date date = Calendar.getInstance(LATimezone).getTime();
System.out.println("SimpleDateFormat未设置时区: "+simpleDateFormat.format(date));
System.out.println("SimpleDateFormat2设置时区: "+simpleDateFormat2.format(date));
结果: