E, dd MMM yyyy HH:mm:ss Z我以时区所在的形式从服务器获得了日期+0200
yyyy-MM-dd HH:mm:ss我用我自己的格式解析它
myFormat.format(serverFormat.parse(dateString));
我弄错了时间:一小时前。因此,如果我10:00进行转换,我会得到09:00. 为什么?
E, dd MMM yyyy HH:mm:ss Z我以时区所在的形式从服务器获得了日期+0200
yyyy-MM-dd HH:mm:ss我用我自己的格式解析它
myFormat.format(serverFormat.parse(dateString));
我弄错了时间:一小时前。因此,如果我10:00进行转换,我会得到09:00. 为什么?
我相信这里的问题是 DST - 夏令时。标准是冬令时。现在是夏天,所以你有1小时的差异。+0200您正在使用不支持也不能支持夏令时的时区转换语法,因为它取决于国家/地区。
您应该使用特定于语言环境的时区定义语法,例如,Europe/Amsterdam而不是+0100. 另外看看类的API TimeZone:
inDaylightTime(Date date) useDaylightTime()检查返回值的时区,这很可能是问题的原因。
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("GMT+2"));
System.out.println( formatter.format(serverFormat.parse(dateString));
尝试一下
formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");