我的程序的一部分需要找到两次之间的最小差异。例如:
时间凌晨1点11分
时间2:1 PM
差异应该是2小时,而不是22小时(不应该给出时间的顺序)。现在,假设两次总是不同的。我有两个字符串和两个用于存储时间的整数:
int startTime = 11;
String startTimeType = "AM";
int endTime = 1;
String endTimeType = "PM";
我尝试通过采用AM / PM的每种可能组合对其进行硬编码:
startTimeType = "AM", endTimeType = "AM";
startTimeType = "AM", endTimeType = "PM";
startTimeType = "PM", endTimeType = "AM";
startTimeType = "PM", endTimeType = "PM";
e.g。在组合1(AM / AM)中,代码为:
int timeDifference = 0;
if (startTimeType.equals("PM")
startTime += 12;
if (endTimeType.equals("PM")
endTime += 12;
if ((startTimeType.equals("AM") && endTimeType.equals("AM"))
{
timeDifference = Math.abs(startTime - endTime);
}
如果没有硬编码,有没有办法做到这一点?
答案 0 :(得分:2)
也许if (difference > 12) difference = 24 - difference
?
答案 1 :(得分:2)
您可以使用时间库。如果您有jdk1.8 +,请使用JodaTime或内置java.time
API:
import java.time.Duration;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
public class TimeDiff {
public static void main(String[] args) {
DateTimeFormatter format = DateTimeFormatter
.ofLocalizedTime(FormatStyle.SHORT);
LocalTime time1 = LocalTime.parse("11:00 AM", format);
LocalTime time2 = LocalTime.parse("01:00 PM", format);
Duration duration = Duration.between(time1, time2);
System.out.println(Math.abs(duration.getSeconds() / 3600));
}
}