我的基本查询是将特定地点的时间转换为其他地方的相应时间。 例如: 在印度洛杉矶23:30时间的时间是几点? 在德国10点钟的时候洛杉矶的时间是几点?
给出的输入是目标和相对位置时区以及要转换的时间。
例如:输入[" America / Los_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实用程序。提前谢谢。
答案 0 :(得分:1)
你问:
在印度洛杉矶时间23:30是什么时候?在德国10点钟的时候洛杉矶的时间是几点?
如上所述,回答这些问题是不可能的。虽然印度全年使用UTC + 05:30,但洛杉矶在UTC-08:00和UTC-07:00之间振荡,Germeny在UTC + 01:00和UTC + 02:00之间振荡。这些更改发生在daylight saving time。
此外,如果您回到历史记录中,您会发现这些时区的许多其他更改。因此,即使我刚才所说的补偿也不一定正确。
只有两种方法可以执行此类调整:
仅适用于从不更改其偏移量的时区,如果您查看所有录制的历史记录,则非常少数。
在特定日期应用调整。例如,您可以转换"今天"在洛杉矶23:30到你喜欢的任何时区。
答案 1 :(得分:0)
转换时间的最佳方法是通过应用偏移将它们恢复为UTC,然后通过应用该偏移将它们切换回所需的时间。
示例:
11/09/2014 12:00 AM - 印度 - IST的UTC偏移为+5:30。 您希望转换为中心时间(CST),其中UTC偏移为-6:00。
现在获取12:00 AM IST等效UTC = 6:30 PM UTC
现在将CST的UTC偏移量添加到此UTC时间,以获得相当于上午12:00 AMST的CST。
这是10/09/2014 12:30 AM。
希望这会有所帮助..
答案 2 :(得分:0)
使用此代码:
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时间偏移量)。