2014-12-13 44 views
1

我的程序的一部分需要找出两次之间的最小差异。例如:以12小时上午/下午格式查找两次之间的差异

时间1:11:00

时间2:01:00

的差异应该是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";

例如在组合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

使用适当的时间/日期时间数据类型.... – 2014-12-13 03:03:17

+1

12 am/12pm是边缘情况下上午12点= 0000未1200。 12pm = 1200,所以你仍然可以+12下午,但只有在校正12am到00小时后。 – Paul 2014-12-13 03:19:32

回答

2

也许if (difference > 12) difference = 24 - difference

2

您可以使用时间库。要么JodaTime或内置java.time API,如果你有jdk1.8 +:

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)); 
    } 
} 
+0

如果我想在Android Studio中使用此代码,我需要做什么? – 2017-06-02 07:41:54

+0

什么阻止你在Android Studio中使用它? (我不是Android开发人员 - 但如果Android支持Java 8,我不期望任何问题) – 2017-06-02 09:34:15

相关问题