我有一个日历对象,它是UTC时区。我想将日历对象中的日期和时间转换为PST,同时记住所有夏令时。我期待用以下签名编写一个辅助函数:
private Calendar getPSTTime(Calendar utcTime)
{
}
答案 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所示,我们总是谈论绝对数字,无论时区如何。
当我们尝试将日期/时间输出为字符串时,时区才有意义。在我的脑海中,我可以回想起两种方法:
在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;
}