以12小时AM / PM格式查找两次之间的差异

时间:2014-12-13 02:55:58

标签: java

我的程序的一部分需要找到两次之间的最小差异。例如:

时间凌晨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);
}

如果没有硬编码,有没有办法做到这一点?

2 个答案:

答案 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));
    }
}