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);

回答:

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

+ 0。

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

要回答您的问题:

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

以上是 Java时区:为什么需要偏移量 的全部内容, 来源链接: utcz.com/qa/424265.html

回到顶部