小编典典

Java时区:为什么需要偏移量

java

我的要求是这样的:

我在数据库和时区中以毫秒为单位保存时间,例如以毫秒为1223123123232单位的时间
很长,而时区为Asia/Calcutta。我必须将其转换Africa/Asmara为时区。

long l = 1223123123232l;
TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta");
long tzOff = tz.getOffset(l);
java.util.Date d = new Date(l-tzOff);   // WHY THIS??
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("Africa/Asmara"));// required timezone
String s = df.format(d);
System.out.println(s);

要检查我引用此:链接

我的问题是:

  1. 如果时区只是不同格式的时间表示(地理区域偏离GMT),为什么我需要从实际时间中减去偏移时间(l-tzOff)
  2. 为什么我不能忽略保存在数据库中的时区,而只考虑要转换日期的时区?

就像是:

long l = 1223123123232l;
java.util.Date d = new Date(l);
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
df.setTimeZone(TimeZone.getTimeZone("Africa/Asmara"));// required timezone
String s = df.format(d);
System.out.println(s);

我的系统时区是Asia/Calcutta,我想将Africa/BujumburaEurope/Vatican区中的日期转换为时区。以上代码在这种情况下不起作用?为什么会这样呢?


阅读 753

收藏
2020-11-26

共1个答案

小编典典

Java日期不了解时区。因此,如果我在纽约保存14H00,尽管毫秒值相同,但它将与巴黎的14H00不同。您需要使用唯一的引用来保存日期。人们经常选择GMT
+ 0。

如果您需要检查时区的本地时间,可以使用我在这里开发的工具。

要回答您的问题:

  1. 时区不是时间的表示,而是时间的本地化。要减去偏移量的原因是要确保所有时间都是根据同一参考定义的。
  2. 因为您会得到错误的结果和错误的日期。
2020-11-26