0

我的基本查询是将特定地点的时间转换为另一个地点的相应时间。例如:在印度是 23:30 时,洛杉矶是几点钟?10:00 在德国时,洛杉矶是几点钟?

给出的输入是目标和相对地点时区以及要转换的时间。

例如:输入 ["America/Los_angeles" , "Germany" , "23:00"]

我尝试了各种方法,例如:

1)获取两个时区的当前时间并找到差异并将差异添加到 time 。

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 实用程序。提前致谢 。

4

3 回答 3

1

您询问:

在印度是 23:30 时,洛杉矶是几点钟?10:00 在德国时,洛杉矶是几点钟?

如前所述,不可能回答这些问题。印度全年使用 UTC+05:30,洛杉矶在 UTC-08:00 和 UTC-07:00 之间波动,德国在 UTC+01:00 和 UTC+02:00 之间波动。这些变化发生在夏令时

此外,如果您回顾历史,您会发现这些时区的许多其他变化。因此,即使我刚才所说的偏移量也不一定是正确的。

只有两种方法可以执行这种调整:

  • 仅使用从未更改其偏移量的时区,如果您查看所有记录的历史记录,则很少有这些时区。

  • 在特定日期应用调整。例如,您可以将洛杉矶 23:30 的“今天”转换为您喜欢的任何时区。

于 2014-09-11T19:26:59.473 回答
0

转换时间的最佳方法是通过应用偏移量将它们恢复为 UTC,然后通过应用该偏移量将它们切换回所需的时间。

例子 :

11/09/2014 12:00 AM - 印度 - IST 的 UTC 偏移量为 +5:30。您想转换为中央时间 (CST),其中 UTC 偏移量为 -6:00。

现在得到 12:00AM IST 等效 UTC = 6:30 PM UTC

现在将 CST 的 UTC 偏移量添加到此 UTC 时间,以获得相当于 12:00AM IST 的 CST。

这是 2014 年 10 月 9 日上午 12:30。

希望这可以帮助..

于 2014-09-11T06:41:53.593 回答
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 O'clock'(时间偏移量为 17+2)。

于 2014-09-11T07:17:05.107 回答