给定一个日期,比如2013-03-24,我想将其转换为美国/太平洋时区的当天结束。有没有办法弄清楚该地区特定日期的时区是太平洋标准时间还是太平洋标准时间?顺便说一句,我在用Java。
我怀疑没有办法做到这一点(至少在不查询某个数据库的情况下,该数据库知道何时会发生时区转换),但我想我应该检查一下。
Java Calendar将为您处理这一问题,无需尝试自己整理时区。
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);