使用2个Calendar类实例来获取时间差 [英] Using 2 Calendar class instances to get time difference

查看:117
本文介绍了使用2个Calendar类实例来获取时间差的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用Java中的日历库来尝试找出我的应用程序的问题:



我有两个日历实例, 到达



离开将于2015年7月15日下午5:35离开芝加哥,到达正在着陆于德国柏林的 7/16/15上午9:50



我当前显示旅行持续时间的代码是:

  Calendar depart = Calendar.getInstance 
Calendar arrival = Calendar.getInstance();

depart.setTimeZone(TimeZone.getTimeZone(America / Chicago));
arrival.setTimeZone(TimeZone.getTimeZone(Europe / Berlin));

depart.set(Calendar.MONTH,6);
depart.set(Calendar.DAY_OF_MONTH,15);
depart.set(Calendar.HOUR_OF_DAY,17);
depart.set(Calendar.MINUTE,35);

arrive.set(Calendar.MONTH,6);
arrive.set(Calendar.DAY_OF_MONTH,16);
arrive.set(Calendar.HOUR_OF_DAY,9);
arrive.set(Calendar.MINUTE,50);

System.out.println(Depart:+ depart.getTime()+\\\
Arrive:+ arrive.getTime());

long hours =(arrive.getTimeInMillis() - depart.getTimeInMillis())/(1000 * 60 * 60);
long minutes =(arrival.getTimeInMillis() - depart.getTimeInMillis())/(1000 * 60) - (小时* 60);

System.out.println(飞行时间:+小时+小时++分钟+分钟);`
pre>

,结果是:



出发:7月15日17 17:35 :53 CDT 2015
到达:Thu Jul 16 02:50:53 CDT 2015
飞行时间:9小时15分钟



...但我需要的结果是:



出发:七月15日星期三17:35:53 CDT 2015
到达:Thu 7月16日** 09:50:53中欧时区** 2015
飞行时间:9小时15分钟



我需要更改出发和到达,以便显示其当地时间,但仍会报告正确的9小时15分钟的行程。

c> c> c> c>实例,然后调用 toString(),即隐式地 - 将始终使用系统本地时区。



您要使用 SimpleDateFormat ,以便可以控制用于格式化的时区。例如:

  SimpleDateFormat formatter = new SimpleDateFormat(yyyy-MM-dd HH:mm z,Locale.US); 
formatter.setTimeZone(depart.getTimeZone());
System.out.println(Depart:+ formatter.format(depart.getTime()));
formatter.setTimeZone(arrive.getTimeZone());
System.out.println(Arrive:+ formatter.format(arrival.getTime()));


I am using the Calendar library within Java to try and figure out a problem with my application:

I have two Calendar instances, depart and arrive.

depart is leaving at 5:35 pm on 7/15/2015 from Chicago, while arrive is landing at 9:50 am on 7/16/15 in Berlin, Germany.

My current code to display the travel duration is:

    Calendar depart = Calendar.getInstance();       
    Calendar arrive = Calendar.getInstance();

    depart.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
    arrive.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));

    depart.set(Calendar.MONTH, 6);
    depart.set(Calendar.DAY_OF_MONTH, 15);
    depart.set(Calendar.HOUR_OF_DAY, 17);
    depart.set(Calendar.MINUTE, 35);

    arrive.set(Calendar.MONTH, 6);
    arrive.set(Calendar.DAY_OF_MONTH, 16);
    arrive.set(Calendar.HOUR_OF_DAY, 9);
    arrive.set(Calendar.MINUTE, 50);

System.out.println("Depart: " + depart.getTime() + "\nArrive: " + arrive.getTime());

long hours = (arrive.getTimeInMillis() - depart.getTimeInMillis()) / (1000*60*60);
long minutes = (arrive.getTimeInMillis() - depart.getTimeInMillis()) / (1000*60) - (hours*60);

System.out.println("Flight duration: " + hours + " hours" + " " + minutes + " minutes");`

and the result is:

Depart: Wed Jul 15 17:35:53 CDT 2015 Arrive: Thu Jul 16 02:50:53 CDT 2015 Flight duration: 9 hours 15 minutes

...But I need the result to be:

Depart: Wed Jul 15 17:35:53 CDT 2015 Arrive: Thu Jul 16 **09:50:53 Central European Timezone** 2015 Flight duration: 9 hours 15 minutes

I need to change both depart and arrive so they display their local time, but still report the correct travel duration of 9 hours and 15 minutes.

解决方案

You're calling getTime() to get a Date instance, and then calling toString() on that, implicitly - that will always use the system local time zone.

You want to use SimpleDateFormat so that you can control the time zone used for formatting. For example:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm z", Locale.US);
formatter.setTimeZone(depart.getTimeZone());
System.out.println("Depart: " + formatter.format(depart.getTime()));
formatter.setTimeZone(arrive.getTimeZone());
System.out.println("Arrive: " + formatter.format(arrive.getTime()));

这篇关于使用2个Calendar类实例来获取时间差的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆