在开发中遇到92年之前新加坡夏令时的问题,亚洲每个国家在不同年份都实行过夏令时,而且每个国家的夏令时实行年份应该被写到jdk里了。
可以看如下示例:
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Singapore"));
String dateStr = "1993-06-06 22:50:35";
Date date = sdf.parse(dateStr);
System.out.println("date ===="+ date);
String dateStr92 = "1991-09-14 22:00:00";
Date date92 = sdf.parse(dateStr92);
System.out.println("date92==="+date92);
}
输出结果:
date ====Sun Jun 06 22:50:35 CST 1993
date92===Sat Sep 14 23:00:00 CDT 1991
可以看出第二个日期输出的结果比预期要快一个小时。
解决方式:
时间类型采用把时间戳 自动转换成 字符串类型来进行传输, 然后接收方用如下方式进行转换:
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date date;