2

Java と Joda Time を使用して、個人用のスケジュール マネージャーを作成したいと考えています。ユーザーには、1 か月の各日について、1 日に特定の期間 (例: 午前 10 時から午後 4 時) があります。彼は 1 日の期間を抽出し、この期間に家事のリスト (つまり文字列) を「追加」できる必要があります。それから彼は彼の一日の残りの部分を見せられます. 彼は、残りの期間がなくなるまで、これからさらに期間を抽出できます。抽出した期間を 1 日のスケジュールに追加し、その期間 (自由時間) の雑用をすべて削除することができます。

抽出できるタイム スライスのサイズは、ユーザーが決定します。タイム スライスの数 = 1 日に利用できる合計時間/ユーザーが設定したタイム スライスのサイズ = 希望するサイズのタイム スライスの数 + 残りの時間

彼は 1 日を 1 時間、30 分、15 分、20 分、40 分などのチャンクに分割できます。

追加:ユーザーは自分のスケジュール全体を保存して、戻ってきて過去に何をしていたかを確認できるようにする必要があります。毎日の時間は可変です - 午前10時から午後4時、午前9時から午後1時など

私は Joda Time を初めて使用します。これが Joda Time で可能かどうか、また可能であれば、簡単なのか面倒なのかわかりません。私はいくつかのガイダンスが必要です。コード全体を入力するように求めているわけではありません。

前もって感謝します。

4

3 に答える 3

1

ここに更新されたコードがあります

import java.util.ArrayList;
import java.util.List;

import org.joda.time.DateTime;
import org.joda.time.Period;

public class Schedule {

// figure out some way to Store these values in a database
static List<DateTime[]> schedule = new ArrayList<DateTime[]>();

//Number of hours in a day
static DateTime startDay = new DateTime(2013, 03, 12, 8, 0, 0);
static DateTime endDay = new DateTime(2013, 03, 12, 16, 0, 0);

//Create a Period from the start and End Day dates
static Period dayPeriod = new Period(startDay, endDay);

public static void main(String[] args) {

    // These events will be created on your UI
    DateTime[] firstEvent = { new DateTime(2013, 03, 12, 9, 0, 0), new DateTime(2013, 03, 12, 10, 0, 0) };
    DateTime[] secEvent = { new DateTime(2013, 03, 12, 11, 0, 0), new DateTime(2013, 03, 12, 12, 0, 0) };
    DateTime[] thirdEvent = { new DateTime(2013, 03, 12, 12, 0, 0), new DateTime(2013, 03, 12, 13, 0, 0) };

    //print the hours left, before creating events
    System.out.println(dayPeriod.getHours() + " : " + dayPeriod.getMinutes() + " : " + dayPeriod.getSeconds());

    //Call a method to validate them
    validateAndAdd(firstEvent);
    validateAndAdd(secEvent);
    validateAndAdd(thirdEvent);

    //print the hours left after creating events
    System.out.println(dayPeriod.getHours() + " : " + dayPeriod.getMinutes() + " : " + dayPeriod.getSeconds());

}

public static void validateAndAdd(DateTime[] event) {

    //Subtract the event period from the Day Period
    dayPeriod = dayPeriod.minus(new Period(event[0], event[1]));
    schedule.add(event);
}
}

この実行からの出力は

 8 : 0 : 0
 5 : 0 : 0

ただし、firstEvent を

DateTime[] firstEvent = { new DateTime(2013, 03, 12, 9, 30, 0), new DateTime(2013, 03, 12, 10, 0, 0) };

実行からの出力は

8 : 0 : 0
6 : -30 : 0
于 2013-03-12T07:29:13.163 に答える
0

説明したことを達成するには、チャンクの長さを計算し、各チャンクの開始時刻と終了時刻を保存する必要があります。JodaTime を使用すると、チャンクの開始時刻と終了時刻を簡単に計算できます。DateTime#plusHours (N 時間追加)、DateTime#plusMinutes (N 分追加)などの API を提供します。

例えば:

DateTime beginTime = DateTime.now();
DateTime endTime = beginTime.plusMinutes(40);
System.out.println(beginTime);
System.out.println(endTime);
于 2013-03-12T07:33:11.223 に答える