0

我正在编写一个 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;


    }
}
4

4 回答 4

3

已经有一些库可以为你做一些工作,Calender比如JodaTime。后者使这种类型的工作特别容易。单个类LocalTime可以管理添加和格式化:

LocalTime localTime = new LocalTime("17:46");
LocalTime newTime = localTime.plusHours(1).plusMinutes(1); 
System.out.println(newTime.toString("HH:mm"));
于 2013-05-30T02:53:19.953 回答
2

您可以使用内置Calendarjava.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()));
于 2013-05-30T02:47:15.123 回答
2

这显然是功课,所以我不会费心推荐一个可以为你做这件事的图书馆。

除了没有意义的printCurrentTime()方法外,您的代码看起来不错。

这个方法应该做的就是从小时和分钟构建一个字符串。

应该很简单:

public void printCurrentTime() {
    System.out.println(hour + ":" + minute);
}

或者,如果您希望它返回一个字符串(可以在其他地方打印),它看起来像这样:

public String toString() {
    return hour + ":" + minute;
}

让该方法返回一个 int 是没有意义的。

void如果您希望它打印,它应该返回。

String如果您希望它返回,它应该返回......一个字符串。


我刚刚阅读了您代码中的注释......其中提到了您的问题中未包含的要求。

因为您需要填充小时和分钟(当它们小于 10 时),所以您需要添加更多逻辑。

我会亲自使用String.format()来填充您的数字...

但是....由于这是家庭作业,您可能不应该这样做。

我会创建两个简单的方法:

  1. getHourString()
  2. 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);
}
于 2013-05-30T02:55:38.603 回答
1

我会改变 printCurrentTime()

public int  printCurrentTime() {
     System.out.printf("%02d:%02d%n", hour, minute);
     return hour * 60 + minute;
}

其余的代码似乎还可以

于 2013-05-30T03:00:18.797 回答