我从E, dd MMM yyyy HH:mm:ss Z
表单中获取了服务器的日期,其中时区为+0200
我使用
以我自己的格式yyyy-MM-dd HH:mm:ss
解析它
myFormat.format(serverFormat.parse(dateString));
我错了时间:这是一个小时前。所以,如果我在转换中获得10:00
,我会得到09:00
。为什么呢?
答案 0 :(得分:1)
我认为这里的问题是夏令时 - 夏令时。标准是冬季时间。这是一个夏天,所以你得到1小时的差异。
您正在使用不支持夏令时的时区转换语法+0200
,因为它取决于国家/地区。
您应该使用特定于区域设置的时区定义语法,例如Europe/Amsterdam
代替+0100
。另外,请查看类TimeZone
的API:
inDaylightTime(Date date)
useDaylightTime()
答案 1 :(得分:0)
检查返回值的时区,这很可能是导致问题的原因。
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));
答案 2 :(得分:0)
试试吧
formatter = new SimpleDateFormat("E, dd MMM yyyy HH:mm:ss Z");