【发布时间】:2018-09-22 15:40:31
【问题描述】:
我需要在 12:09:47 到 14:20:55 的 2 个特定时间之间的所有可能的时间组合 (hh:mm:ss) 中找到唯一的数字。我目前正在做以下事情:
- 从开始时间获取秒值
- 将此秒的值加 1,然后生成新的 LocalTime 使用新的秒值。
- 比较这个新时间以确保它小于结束时间。
- 从 hh:mm:ss 获取数字并将它们添加到 Set 集合中
(Set<Integer> uniqueDigits = new TreeSet<Integer>();)提供唯一编号
但是在添加 59 秒之后,我如何增加分钟和小时,直到时间范围结束?
到目前为止,我有以下代码:
public int timeCombinations (String startTime, String endTime) {
LocalTime end = LocalTime.parse(endTime);
int count = 0;
for (LocalTime t = LocalTime.parse(startTime, DateTimeFormatter.ofPattern("HH:mm:ss")); t.isBefore(end); t=t.plusSeconds(1)) {
// System.out.println(t);
// String timeStr = t.toString();
// int second = t.get(ChronoField.SECOND_OF_MINUTE);
System.out.println(t);
Set<Integer> uniqueDigits = new TreeSet<Integer>();
String hour = String.valueOf(t.getHour());
String mins = String.valueOf(t.getMinute());
String secs = String.valueOf(t.getSecond());
uniqueDigits.add(Integer.valueOf(String.valueOf(t.getHour()).substring(0,1)));
if(hour.length()==2) {
uniqueDigits.add(Integer.valueOf(String.valueOf(t.getHour()).substring(1)));
}
uniqueDigits.add(Integer.valueOf(String.valueOf(t.getMinute()).substring(0,1)));
if(hour.length()==2) {
uniqueDigits.add(Integer.valueOf(String.valueOf(t.getMinute()).substring(1)));
}
uniqueDigits.add(Integer.valueOf(String.valueOf(t.getSecond()).substring(0,1)));
if(secs.length()==2) {
uniqueDigits.add(Integer.valueOf(String.valueOf(t.getSecond()).substring(0,1)));
}
我确信有更好的方法可以达到同样的效果。有人可以建议另一种方式吗?
谢谢
【问题讨论】:
-
如果您想比较时间,您应该使用内置的 Java API(例如LocalTime)而不是字符串。大部分工作已经为您完成
-
如何获取开始和结束时间的时间戳并继续循环,直到您的开始时间戳达到结束时间戳,将当前时间戳格式化为您喜欢的字符串格式
标签: java sorting collections