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");