Java时区:为什么需要偏移量
我的要求如下: 我在数据库和时区中以毫秒为单位保存时间。例如,在long中以毫秒为单位的时间是Java时区:为什么需要偏移量,java,Java,我的要求如下: 我在数据库和时区中以毫秒为单位保存时间。例如,在long中以毫秒为单位的时间是1223123123232,时区是Asia/Calcutta。我必须把它转换成非洲/阿斯马拉时区 long l = 1223123123232l; TimeZone tz = TimeZone.getTimeZone("Asia/Calcutta"); long tzOff = tz.getOffset(l); java.util.Date d = new Date(l-tzOff); // WHY
1223123123232
,时区是Asia/Calcutta
。我必须把它转换成非洲/阿斯马拉
时区
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);
要检查,我引用以下内容:
我的问题是:
(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);
我的系统时区是亚洲/加尔各答
,我想将非洲/布琼布拉
时区中的日期转换为欧洲/梵蒂冈
时区。在这种情况下,上述代码不起作用?为什么会这样?。因此,如果我在纽约保存14H00,它将与巴黎的14H00不同,尽管毫秒值相同。您需要使用唯一的引用来保存日期。人们通常选择GMT+0
如果您需要跨时区检查本地时间,可以使用我开发的工具
回答您的问题:
取自GMT纪元以来的毫秒数。因为在您的例子中,
l
是自其他时间点(即1970年1月1日,亚洲/加尔各答的00:00:00)起的毫秒数,您必须首先将其转换为GMT。这是通过减去相关的时区偏移量来完成的。Thnx作为回答,先生,但是,如果我没有错的话,只有一个历元。@RiteshKaushik:没错。但是,你的l
不是从历元的偏移量,而是从其他时间点的偏移量,你需要对此进行更正。先生,我的默认时区是Asia/Calcutta
。我想将日期从利比亚
时区转换为非洲/布琼布拉
。上面我粘贴的代码没有给出正确的结果?先生,我的默认时区是Asia/Calcutta
。我想将日期从利比亚
时区转换为非洲/布琼布拉
。上面我粘贴的代码没有给出正确的结果?没有。你应该使用我在答案开头发布的链接中提供的代码示例。请参阅“在时区之间转换日期”部分。