我相当熟悉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);
}
}
答案 0 :(得分:4)
帮自己一个忙,不自己执行日期/时间算术。
相反,请使用Joda Time为您处理:
LocalTime
(通过DateTimeFormatter.parseLocalTime
)Period
,Period.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。它可以帮助您轻松完成复杂的日期计算。