2

Javaで時間を加算/減算するにはどうすればよいですか? たとえば、就寝時刻を入力すると、90 分 (1 睡眠サイクルの長さ) が追加されて、理想的な起床時刻が表示されるプログラムを作成しています。

Scanner input;
input = new Scanner (System.in);

int wakeup0;
int wakeup1;
int wakeup2;
int wakeup3;
int wakeup4;
int wakeup5;

System.out.println("When will you be going to bed?");
int gotobed = Integer.parseInt(input.nextLine());
wakeup0 = gotobed + 90;
wakeup1 = wakeup0 + 90;
wakeup2 = wakeup1 + 90;
wakeup3 = wakeup2 + 90;
wakeup4 = wakeup3 + 90;
wakeup5 = wakeup4 + 90;

System.out.println("You should set your alarm for: "+wakeup0+" "+wakeup1+" "+wakeup2+" "+wakeup3+" "+wakeup4+" or "+wakeup5);

90 を 915 に加算すると、1095 ではなく 1045 になるようにするにはどうすればよいですか?

4

4 に答える 4

2

すべてをミリ秒単位で計算します。最初は不便に思えるかもしれませんが、計算は非常に簡単です。

就寝時刻を入力するときは、ユーザーがこれを行う方法を決定する必要があります。時間と分になりますか。AM/PM または 24 時間時計はありますか。そして、どのタイムゾーンを検討しますか。これらはすべて Calendar または DateFormat クラスで行われ、指定された時刻を含む単一の long 値が返されます。

その後、時間オフセットを追加するのは簡単です。

SimpleDateFormat df = new SimpleDateFormat("HHmm");
long bedttime = df.parse(inputValue).getTime();
long wakeup1 = bedttime + (90 * 60 * 1000);   //90 minutes in milliseconds.
long wakeup2 = wakeup1  + (90 * 60 * 1000);   //90 minutes in milliseconds.
long wakeup3 = wakeup2  + (90 * 60 * 1000);   //90 minutes in milliseconds.
long wakeup4 = wakeup3  + (90 * 60 * 1000);   //90 minutes in milliseconds.
long wakeup5 = wakeup4  + (90 * 60 * 1000);   //90 minutes in milliseconds.

System.out.println("The first wakeup time is "+df.format(new Date(wakeup1)));

各 long 値は、アラームが鳴る時間を保持します。フォーマッターを再度使用して、その時間値のユーザーフレンドリーな表現を生成します。

于 2013-10-09T01:51:47.807 に答える
0

1 時間は 100 分ではなく 60 分で構成されているため、時間と分を分けると簡単になります。ユーザーに時間を「HH:MM」として入力し、split(":") を使用して解析して時間と分を別々に取得するように依頼します。

    System.out.println("When will you be going to bed?");
    String rawBedtime = input.nextLine();
    String[] gotobed = rawBedtime.split(":");
    int minutes = Integer.parseInt(gotobed[0]);
    int hours = Integer.parseInt(gotobed[1]);

加算する時間数と分数を取得するには:

    int additionalHours = 90/60;
    int additionalMinutes = 90%60;

ただし、おそらく Java の Calendar または Date クラスを使用します。彼らはあなたのために多くの本質的なことを世話します.

于 2013-10-09T01:44:46.930 に答える
0

あなたの質問に対する正確な回答ではないかもしれません。この場合、以下のようにCalendarSimpleDateFormatを使用する必要があります。

SimpleDateFormat df = new SimpleDateFormat("HHmm");
System.out.println("When will you be going to bed?");
String gotobed = input.nextLine();
Date date = df.parse(gotobed);

Calendar calendar = Calendar.getInstance();
calendar.setTime(date);

calendar.add(Calendar.MINUTE, 90);
String wakeup0 = df.format(calendar.getTime());

calendar.add(Calendar.MINUTE, 90);
String wakeup1 = df.format(calendar.getTime());

calendar.add(Calendar.MINUTE, 90);
String wakeup2 = df.format(calendar.getTime());

calendar.add(Calendar.MINUTE, 90);
String wakeup3 = df.format(calendar.getTime());

calendar.add(Calendar.MINUTE, 90);
String wakeup4 = df.format(calendar.getTime());

calendar.add(Calendar.MINUTE, 90);
String wakeup5 = df.format(calendar.getTime());

System.out.println("You should set your alarm for: " + wakeup0 + " "
        + wakeup1 + " " + wakeup2 + " " + wakeup3 + " " + wakeup4
        + " or " + wakeup5);

入力 0900 の場合、出力は次のようになります。

When will you be going to bed?
0900
You should set your alarm for: 1030 1200 1330 1500 1630 or 1800
于 2013-10-09T01:49:13.323 に答える
0

Firstly, there is no direct conversion from a 4 digit number to a time. So you will need to use Calendar

From this you can get the current date/time Calendar rightNow = Calendar.getInstance();

Then you can use the add method to add your 90 minutes see http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#add(int, int)

于 2013-10-09T01:43:19.397 に答える