【问题标题】:Is there a way to do 24-hour format and 60-minute format in Java?有没有办法在 Java 中进行 24 小时格式和 60 分钟格式?
【发布时间】:2022-01-04 09:46:52
【问题描述】:
if(ExcessTimeHours >= 24) {
    ExcessTimeHours = 0;
}
if(ExcessTimeMin >= 60) {
    ExcessTimeMin = 0;
    ExcessTimeHours ++;
}

我添加第一部电影开始的时间,然后我添加该电影的时长,然后我添加第二部电影的开始时间,还添加这部电影的时长,程序会告诉我我是否能够同时看到这两个电影电影没有问题,或者我会错过电影的几分钟或者我无法制作。

我的问题是,当时间超过午夜并从 24 小时跳到 0 小时时,我不知道如何解决这个问题。无法弄清楚情况。

    System.out.println("Start of movie A:");
    
    System.out.print("hour: ");                         // 17; 23; 0
    int startHourA = s.nextInt();
    System.out.print("min: ");                          // 30; 30; 30
    int startMinA = s.nextInt();
    
    System.out.println("Length of movie A:");
    
    System.out.print("hour: ");                         // 2; 2; 2
    int lengthHourA = s.nextInt();
    System.out.print("min: ");                          // 0; 0; 1
    int lengthMinA = s.nextInt();
    
    
    System.out.println("Start of movie B:");
    
    System.out.print("hour: ");                         // 20; 0; 0
    int startHourB = s.nextInt();
    System.out.print("min: ");                          // 0; 20; 31
    int startMinB = s.nextInt();
    
    System.out.println("Length of movie B:");
    
    System.out.print("hour: ");                         // 0; 1; 2
    int lengthHourB = s.nextInt();
    System.out.print("min: ");                          // 35; 35; 0
    int lengthMinB = s.nextInt();


    int timeBetweenMoviesHour = startHourB - ExcessTimeHours;
    int timeBetweenMoviesMin = startMinB - ExcessTimeMin;

    if (timeBetweenMoviesHour == 0 && timeBetweenMoviesMin >= 0) {
        System.out.println("Recommendation: No problem");
    }
    else if (timeBetweenMoviesMin > 0) {
        System.out.println("Recommendation: You won't see " + 
        timeBetweenMoviesMin + " minutes");
    }
    else System.out.println("Recommendation: You can't make it");   

【问题讨论】:

  • 请为您的问题添加更多详细信息,因为目前尚不清楚。你想做什么?应该发生什么?什么目前不起作用?
  • 当值超过2460 时,为什么要将值设置为0?这意味着如果你有ExcessTimeMin == 493,你的代码等于ExcessTimeHours == 1ExcessTimeMin == 0,这是错误的。如果有的话,您需要从字段中减去 2460 的倍数,直到再次进入有效范围。
  • 是的,这正是我不知道该怎么做。我知道这是写错了。

标签: java if-statement time


【解决方案1】:

java.time

您将需要使用LocalTimeDuration 类。比如像下面这样。我不认为我的代码完全符合您的要求,但它应该可以帮助您入门。

    // Convert inputs to LocalTime and Duration objects

    LocalTime startMovieA = LocalTime.of(16, 0);
    Duration lengthMoviaA = Duration.ofHours(2).plusMinutes(15);

    LocalTime startMovieB = LocalTime.of(18, 45);

    // Do calculations

    LocalTime endMovieA = startMovieA.plus(lengthMoviaA);
    Duration timeBetweenMovies = Duration.between(endMovieA, startMovieB);

    // Output

    if (timeBetweenMovies.isNegative()) {
        System.out.println("You will be missing " + timeBetweenMovies.abs());
    }
    else if (timeBetweenMovies.isZero()) {
        System.out.println("You will just make it");
    }
    else {
        System.out.println("You will have " + timeBetweenMovies + " between the movies");
    }

输出是:

电影之间会有 PT30M

Duration 对象打印有点有趣。格式为 ISO 8601。对于您的用户,您需要更好地格式化,例如 You will have 30 minutes between the movies。搜索如何和/或使用底部的链接。在 WWW 的各个地方都有描述。

链接

【讨论】:

  • 哦,是的,我找到了。对不起,我是新来的。
  • 是的,需要一点时间来了解它是如何在这里工作的。我们都去过那里。
猜你喜欢
  • 1970-01-01
  • 2011-10-20
  • 2023-04-07
  • 1970-01-01
  • 2016-08-28
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多