【发布时间】:2014-06-01 13:25:42
【问题描述】:
我有一个日期,例如 Thu April 17 09:03:01 GMT 2014 在时区:
sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]
每次尝试转换为 UTC 时,它都会返回 Thu April 17 10:03:01 GMT 2014
这没有意义,因为相应的 UTC 时间实际上是 Thu April 17 08:03:01 GMT 2014,因为我的时区时间由于夏令时增加了 1 小时。
我用来转换的代码是这样的:
//timeZone - id="Europe/London"
public static Date timeZoneConvertDate(Date date, TimeZone timeZone) {
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.setTimeZone(timeZone);
sdf.applyPattern("dd-MM-yyyy HH:mm:ss");
String newDate = sdf.format(date);
sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
try {
Date nd = sdf.parse(newDate);
return nd;
} catch (ParseException e) {
return null;
}
}
谁能解释我做错了什么?
【问题讨论】:
-
将对象转换为字符串然后对其进行解析以将其转换回来并不是一个好习惯。我会使用 joda-time 库进行这样的转换:joda.org/joda-time
-
@Duncan 这是我的错误,我已经对问题进行了更正
标签: java date datetime timezone utc