我正在使用两个Calendar实例,并尝试在每个实例之间获取时间(我正在调用实例depart
和arrive
)。
以下是我关注的代码段:
public static void main(String[] args)
{
Calendar departDST = Calendar.getInstance();
departDST.set(Calendar.YEAR, 2015);
departDST.set(Calendar.MONTH, 2);
departDST.set(Calendar.DAY_OF_MONTH, 7);
departDST.set(Calendar.HOUR_OF_DAY, 17);
departDST.set(Calendar.MINUTE, 35);
Calendar arriveDST = Calendar.getInstance();
arriveDST.set(Calendar.YEAR, 2015);
arriveDST.set(Calendar.MONTH, 2);
arriveDST.set(Calendar.DAY_OF_MONTH, 8);
arriveDST.set(Calendar.HOUR_OF_DAY, 9);
arriveDST.set(Calendar.MINUTE, 50);
departDST.setTimeZone(TimeZone.getTimeZone("America/Chicago"));
arriveDST.setTimeZone(TimeZone.getTimeZone("UTC"));
printFlightDuration(departDST, arriveDST);
}
public static void printFlightDuration(Calendar depart, Calendar arrive)
{
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()));
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");
}
现在,如果我将depart
的日期设置为 2015年7月15日下午5:35 ,arrive
为 7/16 / 2015年上午9:50 ,应用程序报告 9小时15分钟的正确时间。
如果我将depart
的日期设置为 2015年3月7日下午5:35 ,arrive
为 3/8/2015 at上午9:50 ,应用程序报告 10小时15分钟 [因为白天节省时间发生在2015年3月8日凌晨2:00]。
我应该如何更改我的应用程序,以便报告9小时15分钟的正确持续时间,无论我将depart
和arrive
设置为哪个日期?
depart
和arrive
转换为UTC,然后计算它们之间的差异,但要么是我错误地实现了解决方案,要么解决方案完全是对问题的错误答案