给定一个日期,比如 2013-03-24,我想将其转换为美国/太平洋时区的那一天结束。有没有办法确定该地区特定日期的时区是 PST 还是 PDT?顺便说一句,我正在使用 Java。
我怀疑没有办法做到这一点(至少在不查询某个知道时区转换何时发生的数据库的情况下),但我想我会检查一下。
给定一个日期,比如 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);