Java中的时间转换,不使用Joda Time

时间:2014-09-11 06:11:09

标签: java date datetime timezone java.util.calendar

我的基本查询是将特定地点的时间转换为其他地方的相应时间。 例如: 在印度洛杉矶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实用程序。提前谢谢。

3 个答案:

答案 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时间偏移量)。