Simpledateformat parse减去而不是添加

时间:2016-04-28 16:16:20

标签: java date simpledateformat

我正在尝试将我获得的时间(在CEST / CET中)更改为GMT以将其存储在我的数据库中。但是当我将CEST中的日期解析为GMT而不是减去2时,它会增加2个小时!

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); //My locale is CEST
Date dateOfBooking = formatter.parse(bookedDate + " " + bookedDateTime); //Here the time is 10:09

formatter.setTimeZone(TimeZone.getTimeZone("GMT")); // Timezone I need to store the date in
dateOfBooking = formatter.parse(bookedDate + " " + bookedDateTime); // Here the time is 12:09
DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
bookedDateTime = timeFormat.format(dateOfBooking);

任何人都可以解释原因吗?我已经尝试将我的本地时区设置为不同的时区,它总是以另一种方式工作,减去而不是添加和反之。

1 个答案:

答案 0 :(得分:2)

您正在将该日期再次解析为GMT。 (当打印为CEST或您的区域设置时区时,将增加+ 2小时)

您真正想要的是将已解析的日期打印为GMT:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()); //My locale is CEST
Date dateOfBooking = formatter.parse(bookedDate + " " + bookedDateTime); //Here the time is 10:09

DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
timeFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
bookedDateTime = timeFormat.format(dateOfBooking);
System.out.println(bookedDateTime);

基本上,你必须在用于创建时间字符串的timeFormat中设置GMT区域,而不是用于解析的格式化程序