我的基本查询是将一个特定地方的时间转换为另一个地方的相应时间。例如:在印度,洛杉矶的时间是23:30?在德国,洛杉矶的时间是10点?
给出的输入是目标和相对地点时区以及要转换的时间。
例如:输入["美国/Loss_angeles"、"德国"、"23:00"]
我尝试了多种方法,例如:
1) 获取两个时区中的当前时间,找到差异并将差异添加到时间中。
2) 使用以下代码:
String target_timezone = "America/Los_Angeles";
String rel_timezone ="Germany";
Calendar rel_calender = new GregorianCalendar(TimeZone.getTimeZone(rel_timezone));
rel_calender.set(Calendar.HOUR, Integer.parseInt(arr[0]));
rel_calender.set(Calendar.MINUTE, Integer.parseInt(arr[1]));
rel_calender.set(Calendar.SECOND, 00);
Calendar TargetTime = new GregorianCalendar(TimeZone.getTimeZone(target_timezone));
TargetTime.setTimeInMillis(rel_calender.getTimeInMillis());
SimpleDateFormat f = new SimpleDateFormat("EEEE,yyyy-MM-dd hh:mm a Z");
System.out.println("time in " + target_timezone + "when it is 17:00 in " + rel_timezone + ": " );
System.out.println((TargetTime.get(Calendar.DST_OFFSET)));
System.out.print((TargetTime.get(Calendar.HOUR)));
System.out.print(":" +(TargetTime.get(Calendar.MINUTE)));
System.out.println(":" +(TargetTime.get(Calendar.SECOND)));
System.out.println((TargetTime.get(Calendar.YEAR)));
年份不对。!
有更好的方法吗?我尝试过Calendar、SimpleDateFormat和Date的各种方法,但都没有成功。我只能使用基本的java实用程序,而不能使用Joda实用程序。提前谢谢。
您问:
在印度,洛杉矶的时间是23:30?在德国,洛杉矶的时间是10点?
不可能像上述那样回答这些问题。印度全年使用UTC+05:30,洛杉矶在UTC-08:00和UTC-07:00之间振荡,Germeny在UTC+01:00和UTC+02:00之间振荡。夏令时发生这些更改。
此外,如果你回到历史,你会发现这些时区还有许多其他变化。所以即使是我刚才说的抵消也不一定是真的。
只有两种方法可以进行这种调整:
-
仅适用于从未更改偏移量的时区,如果您查看所有记录的历史,则很少。
-
在特定日期应用调整。例如,您可以将洛杉矶23:30的"今天"转换为您喜欢的任何时区。
使用此代码:
Calendar rel_calender = new GregorianCalendar();
rel_calender.set(Calendar.HOUR_OF_DAY, 17);
rel_calender.set(Calendar.MINUTE, 00);
rel_calender.set(Calendar.SECOND, 00);
rel_calender.get(Calendar.HOUR);
rel_calender.setTimeZone(TimeZone.getTimeZone(rel_timezone));
如果使用代码,则rel_calendar小时设置为19点钟(17+2时间偏移)。
转换时间的最佳方法是通过应用偏移量将时间恢复为UTC,然后通过应用该偏移量将其切换回所需时间。
示例:
2014年9月11日上午12:00-印度-其中IST的UTC偏移量为+5:30。您希望转换为中央时间(CST),其中UTC偏移量为-6:00。
现在获得相当于国际标准时间上午12:00UTC=6:30 UTC
现在,将CST的UTC偏移量添加到此UTC时间,以获得相当于IST凌晨12:00的CST。
这是2014年9月10日上午12:30。
希望这能有所帮助。。