【问题标题】:Java class - add n hours, minutes, and seconds to a timeJava 类 - 将 n 小时、分钟和秒添加到时间
【发布时间】:2012-01-28 00:17:17
【问题描述】:

我对 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);
   }
}

【问题讨论】:

  • 如果这不是家庭作业,您应该知道已经存在执行此操作的方法。见stackoverflow.com/questions/439903
  • 班级名称中的E7表示这是“练习7”,大约是学期中的那个时间......
  • 这是学校作业。我们应该使用迄今为止我们所拥有的有限知识来完成此任务(仅涵盖了几周的材料)。在我自己努力完成之后,我会看看我可以在网上找到哪些替代解决方案...... :)。
  • 这真的有效吗?您正在寻求改进?或者你不确定它是否会起作用?

标签: java


【解决方案1】:

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

改为使用Joda Time 为您处理:

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

【讨论】:

  • @RobertHarvey:嗯,我会把这个留给任何做类似事情的人:)
  • 感谢您的意见。当我在路上学到更多东西时,这会给我一些东西。现在看起来对我来说有点太高级了。
【解决方案2】:

既然是作业,我不想给你写的全部答案,但至少给你一些思考。

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

然后,打印出新的日期对象就变成了一个练习。

当然,我不知道这对你的班级来说是否已经太复杂了,但这是一种相当简单的方法(假设你已经使用过 Date 对象)而不使用任何 3rd 方库(如 @987654321 @)。

【讨论】:

  • 我们还没有使用过 Date 对象;但是,我将来会回顾这篇文章,并在获得更多知识后学习一些新东西。感谢您的意见。
【解决方案3】:

正如@Jon Skeet 提到的,使用 Joda Time。它将帮助您轻松进行复杂的日期计算。

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2021-07-10
    • 1970-01-01
    相关资源
    最近更新 更多