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);
要检查我引用此:链接
我的问题是:
- 如果时区只是不同格式的时间表示(地理区域偏离GMT),为什么我需要从实际时间中减去偏移时间
(l-tzOff)
? - 为什么我不能忽略保存在数据库中的时区,而只考虑要转换日期的时区?
就像是:
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。
如果您需要检查时区的本地时间,可以使用我在这里开发的工具。
要回答您的问题:
- 时区不是时间的表示,而是时间的本地化。要减去偏移量的原因是要确保所有时间都是根据同一参考定义的。
- 因为您会得到错误的结果和错误的日期。
以上是 Java时区:为什么需要偏移量 的全部内容, 来源链接: utcz.com/qa/424265.html