Java 如何在有夏令时的时区中选择一天的结束时间?

Java 如何在有夏令时的时区中选择一天的结束时间?,java,timezone,timezone-offset,Java,Timezone,Timezone Offset,给定一个日期,比如2013-03-24,我想把它转换成美国/太平洋时区的那天结束。有没有办法确定该地区特定日期的时区是PST还是PDT?顺便说一句,我用的是Java 我怀疑没有办法做到这一点(至少在不查询某个知道时区转换何时发生的数据库的情况下是这样),但我想我会检查一下。Java日历会为您解决这个问题,您无需自己尝试整理时区 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Date dateInServerTZ = format.

给定一个日期,比如2013-03-24,我想把它转换成美国/太平洋时区的那天结束。有没有办法确定该地区特定日期的时区是PST还是PDT?顺便说一句,我用的是Java


我怀疑没有办法做到这一点(至少在不查询某个知道时区转换何时发生的数据库的情况下是这样),但我想我会检查一下。

Java日历会为您解决这个问题,您无需自己尝试整理时区

DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date dateInServerTZ = format.parse("2013-03-24");
Calendar calInServerTZ = Calendar.getInstance();
calInServerTZ.setTime(dateInServerTZ);
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles"));
calInPST.set(Calendar.YEAR, calInServerTZ.get(Calendar.YEAR));
calInPST.set(Calendar.DAY_OF_YEAR, calInServerTZ.get(Calendar.DAY_OF_YEAR));
calInPST.set(Calendar.HOUR_OF_DAY, 23);
calInPST.set(Calendar.MINUTE, 59);
calInPST.set(Calendar.SECOND, 59);
calInPST.set(Calendar.MILLISECOND, 999);
Date endOfDayPST = calInPST.getTime();
您可以通过解析到PST来消除一个步骤,但我觉得这个示例更清楚地说明了服务器时间和用户时间之间的关系

这显然会更有效率:

DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
format.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
Date dateInPST = format.parse("2013-03-24");
Calendar calInPST = Calendar.getInstance(TimeZone.getTimeZone("America/Los_Angeles")); 
calInPST.setTime(dateInPST);
calInPST.set(Calendar.HOUR_OF_DAY, 23);
calInPST.set(Calendar.MINUTE, 59);
calInPST.set(Calendar.SECOND, 59);
calInPST.set(Calendar.MILLISECOND, 999);