我有一个日历对象,它位于 UTC 时区。我想将该日历对象中的日期和时间转换为 PST,同时牢记所有 DST。我正在寻找具有以下签名的辅助函数:
private Calendar getPSTTime(Calendar utcTime)
{
}
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"
的。
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;
}