如何将军事时间整数转换为标准时间字符串

时间:2015-10-21 02:44:37

标签: java

因此,我试图编写一个程序,告诉用户他们可以乘坐什么样的公共汽车来上课。我现在有一个问题:我希望让用户传递一个int来与int值的ArrayList进行比较,告诉他们是否可以捕获该总线。

但是,我想将输出转换为12小时字符串,但我无法找到一种有效的方法!到目前为止,这是我的代码。

package bus;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.*;
public class busSchedule {
    public static void main(String[]args){
        int classTime = 0;
        Scanner scnr = new Scanner(System.in);
        System.out.print("What time do you have to be in class?: ");
        classTime = scnr.nextInt();

        for(int i = 0; i < AB.toCampus.size() - 1; ++i){
            if(classTime > AB.toCampus.get(i)){
                String timeString = Integer.toString(AB.toCampus.get(i));
                DateFormat f2 = new SimpleDateFormat("h:mm aa");
                String newTime = f2.format(timeString).toLowerCase();
                System.out.println("You can take the " + AB.line + " line at " + newTime + " to get to class.");
            }

        }
    }
}

我还有班级AB,这是该行的名称。它如下:

package bus;

import java.util.ArrayList;
import java.util.Arrays;

public class AB {
    static String line = "A-B";
    static ArrayList<Integer> toCampus = new ArrayList<Integer>(
            Arrays.asList(623, 1234, 1734, 2100)
            );

}

就这样,输出只反复打印下午4点。

感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

您可以简单地将军事时间解析为时间等级,然后将其格式化为您想要的输出,例如......

ArrayList<Integer> toCampus = new ArrayList<>(
                Arrays.asList(623, 1234, 1734, 2100)
);

for (int time : toCampus) {
    String value = String.format("%04d", time);
    LocalTime lt = LocalTime.parse(value, DateTimeFormatter.ofPattern("HHmm"));
    System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(lt));
}

哪个输出

06:23 AM
12:34 PM
05:34 PM
09:00 PM

现在,由于您的数据实际已经排序,您可以使用Collections.binarySearch查找匹配项,例如......

ArrayList<Integer> toCampus = new ArrayList<>(
                Arrays.asList(623, 1234, 1734, 2100)
);

Scanner scnr = new Scanner(System.in);
System.out.print("What time do you have to be in class?: ");
int classTime = scnr.nextInt();

int index = Collections.binarySearch(toCampus, classTime);
System.out.println(index);
if (index < 0) {
    index = Math.abs(index) - 1;
}

if (index > 0 && index <= toCampus.size()) {
    int time = toCampus.get(index - 1);
    String value = String.format("%04d", time);
    LocalTime lt = LocalTime.parse(value, DateTimeFormatter.ofPattern("HHmm"));
    System.out.println(DateTimeFormatter.ofPattern("hh:mm a").format(lt));
} else {
    System.out.println("Go back to bed");
}

Collections.binarySearch无法找到匹配项时,它会返回&#34 ;-(插入点) - 1&#34; ,这会告诉我们哪个项目会已经出现了,如果它出现在List

这使我们能够做出关于列表中哪个值最合适的决定。

例如,如果我们输入630,则binarySearch将返回-2,为偏移添加1,这会给我们-1,将其转换为为正数而1。现在,1处的元素显然是1234,但如果我们采用前一个元素,它会返回623