2014-09-11 223 views
0

我的基本查询是将某个特定地点的时间转换为另一个地方的相应时间。 例如: 洛杉矶现在在印度的时间是什么时候? 洛杉矶现在在德国10:00是几点钟?Java中不使用乔达时间的时间转换

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

例如:输入[ “美国/洛杉矶”, “德国”, “23:00”]

我尝试了各种approches的如下列:

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

在我的测试中,2014年的情况看起来不错。 – Jens 2014-09-11 06:21:17

+0

那么,你期望输出是什么,你会得到什么输出呢?你为什么不使用你的SimpleDateFormat? – 2014-09-11 06:26:08

+0

@Jens:对不起,我得到的输出是“2014-09-11 10:00 AM ”这是错误的。 – 2014-09-11 06:42:35

回答

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的时间偏移)。

+0

谢谢你的工作!我现在可以正确地在目标时区中获取日期和时间。但我在day_of_week尝试了类似的方法。它仍然指向第一个时区的日子。这怎么可能 ? – 2014-09-11 07:39:54

+0

你能显示代码吗? – Jens 2014-09-11 07:41:56

+0

对不起,发布代码作为答案,但它太大,不能发表评论条 – 2014-09-11 07:59:30

0

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

实施例:

2014年11月9日12:00 AM - 印度 - 其中所述UTC为IST偏移是5:30。 您想转换为中央时间(CST),其中UTC偏移量是-6:00。

现在得到的上午12:00北京时间相当于UTC = 6:30 PM UTC

现在添加CST的UTC偏移这个UTC时间得到相当于CST 12:00 AM IST的。

哪是2014/10/09 12:30 AM。

希望这有助于..

+2

这种方法的问题是知道使用哪个偏移量。例如,中央时间可能是-6,或者如果夏时制有效,它可能是-5。 – 2014-09-11 19:28:34

+0

当然,我认为提问者也有TimeZone偏移量。 – 2014-09-12 08:48:16

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将洛杉矶的“今天”转换为您喜欢的任何时区。

+0

我决定继续进行第二个假设并开始使用代码! – 2014-09-12 06:19:50