gpt4 book ai didi

Java时区: why Offset is needed

转载 作者:行者123 更新时间:2023-11-30 04:30:46 26 4
gpt4 key购买 nike

我的要求是这样的:

我在数据库和时区中保存以毫秒为单位的时间。例如,以毫秒为单位的时间是 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);

要检查我指的是:link

我的问题是:

  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/Bujumbura 中的日期时区为 Europe/Vatican timezone.上面的代码在这种情况下不起作用?为什么会这样?

最佳答案

Java dates do not know about time zones 。因此,如果我在纽约保存 14H00,则尽管毫秒值相同,但它不会与巴黎的 14H00 相同。您需要使用唯一的引用来保存日期。人们经常选择 GMT+0。

如果需要跨时区查看本地时间,可以使用我开发的工具here .

回答您的问题:

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

关于Java时区: why Offset is needed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14705561/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com