我正在编写一个Java程序,我需要将小时和分钟增加1并以HH:MM格式输出当前时间。如果小时是23,它应该回到0或分钟是59,分钟应该是0,小时应该到下一个小时。这是我到目前为止所做的,但我并不完全确定它是对的。我也不确定这是否是让时间显示的正确方法:小时和分钟之间。这是我的代码:
//TimeOfDay program
public class TimeOfDay
{
private int hour;
private int minute;
/**
* Constructor for objects of class TimeOfDay
*/
public TimeOfDay( int h, int m )
{
setHr( h );
setMin( m );
String time = "17:46";
String [] values = time.split(":");
}
public TimeOfDay()
{
}
/**
- set the hour using an input parameter h
- set the minute using an input parameter m
- add one hour (increase hour by 1)
- add one minute (increase minute by 1)
- output the current time in HH:MM format
(single digit hour or minute must have a leading 0, e.g. 04:09)
*/
public void setHr (int h )
{
if (0 <= h && h < 23 )
hour = h;
else
hour = 0;
}
public void setMin (int m)
{
if (0 <= m && m < 59)
minute = m;
else
minute = 0;
}
public void addHour()
{
hour++;
if ( hour > 23 )
hour = 0;
}
public void addMinute()
{
minute++;
if ( minute > 59 )
{
minute = 0;
addHour(); //increment hour
}
}
public int printCurrentTime()
{
if (hour < 10)
System.out.print( "0" + hour + ":");
if (minute < 10)
System.out.print( "0" + minute);
return time.split;
}
}
答案 0 :(得分:3)
已有图书馆为您开展工作类型,例如Calender
和JodaTime。后者使这种工作特别容易。单个班级LocalTime可以管理添加和格式化:
LocalTime localTime = new LocalTime("17:46");
LocalTime newTime = localTime.plusHours(1).plusMinutes(1);
System.out.println(newTime.toString("HH:mm"));
答案 1 :(得分:2)
您可以使用Calendar
中的内置java.util
类来实现这一目标。使用add(field, value)
,您可以增加小时数,而日历则负责日期中断。
要获得HH:MM格式,您可以使用SimpleDateFormat
格式为“HH:mm”。
Calendar c = Calendar.getInstance(); //automatically set to current time
c.add(Calendar.HOUR, 1);
SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm");
System.out.println(dateFormat.format(c.getTime()));
答案 2 :(得分:2)
这显然是家庭作业,所以我不打算推荐一个能为你做这件事的图书馆。
您的代码看起来不错,但 printCurrentTime()方法除外,这是没有意义的。
所有这些方法应该是从小时和分钟构建一个字符串。
应该这么简单:
public void printCurrentTime() {
System.out.println(hour + ":" + minute);
}
或者如果你想让它返回一个String(可以在别处打印),它将如下所示:
public String toString() {
return hour + ":" + minute;
}
让该方法返回int是没有意义的。
如果要打印,应该返回void
。
如果你想让它返回一个字符串,它应该返回String
。
我只是阅读了您的代码中的注释...其中提到了您的问题中未包含的要求。
因为您需要填充小时和分钟(当它们小于10时),您需要添加更多逻辑。
我个人会用String.format()来填补您的号码......
但....由于这是作业,你可能不应该这样做。
我会创建两个简单的方法:
getHourString()
getMinuteString()
两者都应该返回字符串。
每个方法中的逻辑都非常简单。有点像这样:
private String getHourString() {
String h = "";
if (hour < 10) {
h = "0";
}
return h + hour;
}
您可以对getMinuteString()
执行相同的操作。
您的printCurrentTime()
方法可以合并这些方法的输出(中间有:
)。
换句话说:
public void printCurrentTime() {
String s = getHourString() + ":" + getMinuteString();
System.out.println(s);
}
答案 3 :(得分:1)
我会更改printCurrentTime()
public int printCurrentTime() {
System.out.printf("%02d:%02d%n", hour, minute);
return hour * 60 + minute;
}
其余代码似乎没问题