Java类 - 一次添加n小时,分钟和秒

时间:2012-01-28 00:17:18

标签: java

我相当熟悉Java,想知道这个逻辑是否合理。此类的目的是以12小时格式接收用户输入的时间。然后提示用户输入一段时间。最后,它以12小时格式输出最终时间(添加时间)。我已经通过这个运行了几个测试场景,一切似乎都运行正常。在我称之为好之前,我只是喜欢一些额外的训练眼睛来看它。谢谢你的帮助!

import javax.swing.JOptionPane;

public class M3E7 {
public static void main(String args[]) {

    String start_hr = null;
    String start_min = null;
    String start_sec = null;
    String abbr = null;
    String hr = null;
    String min = null;
    String sec = null;
    int start_hr_num = 0;
    int start_min_num = 0;
    int start_sec_num = 0;
    int hr_num = 0;
    int min_num = 0;
    int sec_num = 0;
    int final_hr = 0;
    int final_min = 0;
    int final_sec = 0;

    start_hr = JOptionPane.showInputDialog("Start time - Enter the hours.");
    start_min = JOptionPane.showInputDialog("Start time - Enter the minutes.");
    start_sec = JOptionPane.showInputDialog("Start time - Enter the seconds.");
    abbr = JOptionPane.showInputDialog("Start time - Enter either am or pm.");
    hr = JOptionPane.showInputDialog("Enter the number of hours to add (less than 24).");
    min = JOptionPane.showInputDialog("Enter the number of minutes to add (less than 60).");
    sec = JOptionPane.showInputDialog("Enter the number of seconds to add (less than 60).");

    start_hr_num = Integer.parseInt(start_hr);
    start_min_num = Integer.parseInt(start_min);
    start_sec_num = Integer.parseInt(start_sec);
    hr_num = Integer.parseInt(hr);
    min_num = Integer.parseInt(min);
    sec_num = Integer.parseInt(sec);

    if (abbr.equals("pm")); {
        start_hr_num += 12;
    }

    final_hr = (start_hr_num + hr_num);
    final_min = (start_min_num + min_num);
    final_sec = (start_sec_num + sec_num);

    if (final_sec >= 60) {
        final_min++;
        final_sec -= 60;
    }

    if (final_min >= 60) {
        final_hr++;
        final_min -= 60;
    }

    if (final_hr >= 24) {
        final_hr -= 24;
    }

    if (final_hr > 12) {
        final_hr -= 12;
        abbr.equals("pm");
    }
    else if (final_hr == 12) {
        final_hr -= 12;
        abbr.equals("am");
    }
    else {
        abbr.equals("am");
    }

    JOptionPane.showMessageDialog(null, "The new time of day is " + final_hr + ":" + final_min + ":" + final_sec + " " + abbr);

    System.exit(0);
   }
}

3 个答案:

答案 0 :(得分:4)

帮自己一个忙,自己执行日期/时间算术。

相反,请使用Joda Time为您处理:

  • 将第一个输入解析为LocalTime(通过DateTimeFormatter.parseLocalTime
  • 使用PeriodPeriod.hours()Period.minutes()
  • 将后三个输入解析为Period.seconds()个值
  • 使用LocalTime.plus(ReadablePeriod)将时段添加到时间
  • 根据需要格式化和输出

答案 1 :(得分:0)

既然是作业,我不想给你写完整个答案,但至少可以给你一些思考。

所有时间和日期都以纪元(即:1970年1月1日)存储为毫秒。我解决问题的方法是取用户输入的日期,并从中创建一个java.util.Date()对象。从该Date对象中,您可以简单地添加/减去用户“句点”中的毫秒数。

然后,它只是一个打印出新日期对象的练习。

当然,我不知道这对你的类来说是否已经过于复杂,但这是一种相当简单的方法(假设你已经使用了Date对象)而没有使用任何第三方库(如{{ 3}})。

答案 2 :(得分:0)

正如@Jon Skeet所说,使用Joda Time。它可以帮助您轻松完成复杂的日期计算。