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

时间:2012-09-10 22:21:18

标签: java timezone timezone-offset

鉴于日期,比如2013-03-24,我想将其转换为美国/太平洋时区当天的结束日期。有没有办法弄清楚该地区特定日期的时区是PST还是PDT?顺便说一下,我正在使用Java。

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

1 个答案:

答案 0 :(得分:0)

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);