java - 找到给定时间范围内所有可能的时间组合

标签 java sorting collections

我需要在 2 个特定时间(例如 12:09:47 到 14:20:55)之间找到所有可能的时间组合 (hh:mm:ss) 中存在的唯一数字。我目前正在执行以下操作:

  1. 从开始时间获取秒值
  2. 将这一秒的值加 1,然后生成新的 LocalTime 使用秒的新值。
  3. 比较这个新时间以确保它小于结束时间。
  4. 从 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)));
            }

我确信有更好的方法可以达到同样的效果。有人可以建议替代方法吗?

谢谢

最佳答案

也许我遗漏了什么,但为什么不这样做:

static void timeCombinations(String startTime, String endTime) 
{
  DateTimeFormatter dtf = DateTimeFormatter.ofPattern("HH:mm:ss");
  LocalTime end = LocalTime.parse(endTime);
  for(LocalTime t=LocalTime.parse(startTime); t.isBefore(end); t=t.plusSeconds(1))
  {
    System.out.println(dtf.format(t));
  }
  System.out.println(end);
}

测试:

public static void main(String[] args)
{
  timeCombinations("12:09:59", "12:10:01");
}

输出:

12:09:59
12:10:00
12:10:01

关于java - 找到给定时间范围内所有可能的时间组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52458231/

相关文章:

.net - 是否可以隐含泛型 List<T> 的数据类型?

java - Android 中歌曲的数据结构

SQL 服务器 Nvarchar 参数

java - 减少java中标签和单选组之间的空间

java - 你能在 GregorianCalendar 日期中设置 AM/PM 还是你只能得到的东西

java - 按值对象属性对 LinkedHashMap 键集进行排序

javascript - 如何使用 javascript 对字母数字列表进行排序

ruby - 按值降序排列散列,然后按升序键入 ruby

java - 如何为带有堆栈的 Iterator 类设置构造函数?

java - android fragment 中的textview中不显示全文