日历对象时区转换

时间:2013-02-08 23:47:19

标签: java calendar timezone

我有一个日历对象,它是UTC时区。我想将日历对象中的日期和时间转换为PST,同时记住所有夏令时。我期待用以下签名编写一个辅助函数:

private Calendar getPSTTime(Calendar utcTime)
{

}

2 个答案:

答案 0 :(得分:1)

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

FYI:方法TimeZone.getAvailableIDs()返回所有可用时区字符串标识符。这就是我从"America/Los_Angeles"获得的地方。

答案 1 :(得分: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;
}