我有一个程序,它需要一个“ AM”“ PM”时间并计算出等效的小时数(以24小时格式)。由于某种原因,它解析并计算了我输入的不正确的24小时等效时间(即5:00 pm等于22)
System.out.print("Enter the end time (HH:MM am): ");
endTime = input.nextLine();
Date ETime = time_to_date.parse(endTime);
Class方法
public int get_Family_A_Calulation(Date STime, Date ETime) {
Date startTimeCalc = STime, endTimeCalc = ETime;
int pay = 0, hoursWorked, StartHour, EndHour;
StartHour = ((((int) startTimeCalc.getTime()) / 1000) / 60) / 60;
EndHour = ((((int) endTimeCalc.getTime()) / 1000) / 60) / 60;
pay = hoursWorked * 15;
return pay;
}
我不确定我的错误在哪里,谁能给我有关如何纠正此错误的建议?
答案 0 :(得分:1)
使用Java8上可用的最新类
LocalDateTime now = LocalDateTime.now();
System.out.println(now.getHour());
答案 1 :(得分:0)
Date后面的实际数据是自该纪元以来的毫秒数。任何小时或时间的表示均基于日历日期部分,并考虑了时区和夏时制。 无论您做什么,都将存在几天的计算问题,等等。 如Scary Wombat所建议,请使用java.time包中的新类。对于您的特定情况,您需要一个LocalTime,因为代码试图表示一个时间元素(小时,分钟,秒等),而不考虑Date,TimeZone等。 https://docs.oracle.com/javase/8/docs/api/java/time/LocalTime.html