使用2个Calendar类实例来获取时间差 [英] Using 2 Calendar class instances to get time difference
问题描述
我使用Java中的日历库来尝试找出我的应用程序的问题:
我有两个日历实例,
和到达
。
离开
将于2015年7月15日下午5:35离开芝加哥,到达
正在着陆于德国柏林的 7/16/15上午9:50 。
我当前显示旅行持续时间的代码是:
Calendar depart = Calendar.getInstance
pre>
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(飞行时间:+小时+小时++分钟+分钟);`
,结果是:
出发: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
andarrive
.
depart
is leaving at 5:35 pm on 7/15/2015 from Chicago, whilearrive
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 aDate
instance, and then callingtoString()
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屋!
查看全文