我的要求是这样的:
我在数据库和时区中以毫秒为单位节省时间。例如,以毫秒为单位的时间为 1223123123232
long 而时区为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);
我的系统时区是Asia/Calcutta
,我想将Africa/Bujumbura
时区中的日期转换为时Europe/Vatican
区。上面的代码在这种情况下不起作用?为什么会这样?