0

我有一个日历对象,它位于 UTC 时区。我想将该日历对象中的日期和时间转换为 PST,同时牢记所有 DST。我正在寻找具有以下签名的辅助函数:

private Calendar getPSTTime(Calendar utcTime)
{

}
4

2 回答 2

1
private Calendar getPSTTime(Calendar utcTime)
{
    TimeZone americaPacific = TimeZone.getTimeZone("America/Los_Angeles");
    Calendar pacificTime = Calendar.getInstance(americaPacific);
    pacificTime.setTime(utcTime.getTime());
    return pacificTime;
}

仅供参考:方法返回所有可用的时区字符串标识符TimeZone.getAvailableIDs()。我就是从那里得到"America/Los_Angeles"的。

于 2013-02-08T23:55:52.150 回答
0

Java 中的时间事件存储为该事件与 1970 年 1 月 1 日 00:00:00 GMT 之间的毫秒数(例如,就好像它发生在伦敦一样)

因此,每当我们在 Java 中谈论日期和时间时,以 java.util.Date 或 java.util.Calendar 为代表,我们总是谈论绝对数字,而不考虑时区。

只有当我们尝试将日期/时间输出为字符串时,时区才有意义。在我的脑海中,我可以回忆起两种方法:

  • 使用日历,设置时区,使用 get(Calendar.XXX) 方法获取您想要的时区中的各个日期/时间组件
  • 使用 SimpleDateTimeFormat,设置时区,将整个日期/时间格式化为您想要的时区的单个字符串

Java中确实没有“时区转换”之类的东西,但是有特定于时区的格式。

但是,如果您想让事情变得非常混乱,您可以将“更正”添加到您的日历时间值中,以便它返回字段值,就好像它在 PST 时区中一样:

private Calendar getPSTTime(Calendar utcTime)
{
   TimeZone pstZ = TimeZone.getTimeZone("America/Los_Angeles");
   long offset = pstZ.getOffset(utcTime.getTime());
   Calendar pacificTime = Calendar.getInstance();
   pacificTime.setTimeInMillis(utcTime.getTimeInMillis()-offset); 
   return pacificTime;
}
于 2013-02-09T01:26:49.263 回答