2

クラスの割り当てがあります。

クラスには、2つの日付の間の日数を計算し、曜日を返し、特定の日付の星座を与えるメソッドが必要です。

そして、これが私が書いたコードです:

import java.util.GregorianCalendar;

public class Data {
    private GregorianCalendar date;

    public Data(int year, int month, int day) {
        date = new GregorianCalendar(year, month + 1, day);
    }

    public int differenceInDaysFrom(int year, int month, int day) {
        GregorianCalendar tempDate = new GregorianCalendar(year, month, day);
        int daysBetween = (int)(tempDate.getTimeInMillis()-date.getTimeInMillis())/(1000 * 60 * 60 * 24);
        return Math.abs(daysBetween);
    }

    public String dayOfTheWeek() {
        String[] stringDays = new String[]{ "Monday",
                                            "Tuesday",
                                            "Wednesday",
                                            "Thursday",
                                            "Friday",
                                            "Saturday",
                                            "Sunday" };
        return stringDays[date.get(GregorianCalendar.DAY_OF_WEEK) - 1];
    }

    public void zodiacSign() {
        int day = date.get(GregorianCalendar.DATE);
        int month = date.get(GregorianCalendar.MONTH);

        System.out.println(day + " " + month);
    }
}
  1. YYY \ MM \ DDで初期化dateすると、dayOfTheWeekで近い将来の日付を確認するとすべてが完璧に機能しますが、誕生日(1991 \ 11 \ 14)を入力すると水曜日に戻りますが、木曜日に生まれました。

  2. 私が星座をチェックするために日と月を取得しようとすると、それは完全に異常になり、11を入力すると0を返します(月の場合、日はうまくいきます)。

  3. さらに...私が今月とぶらぶらし始めたとき、+1適切にdifferenceInDaysFrom動作しなく なった

4

3 に答える 3

3

あなたの誕生日(水または木曜日)の問題について:

まず、10か月目を11月として通過する必要があります0=January。これは他の回答によって発見されました。

次に、文字列配列を次のように宣言する必要があります。

    new String[] { "Sunday", "Monday", "Tuesday", 
"Wednesday", "Thursday", "Friday", "Saturday" };

なぜなら、DAY_OF_WEEK, 1=Sunday, 2=MONDAY,CalendarクラスのjavaDocを確認してください。次に、「木曜日」を取得する必要があります

干支の方法。11と入力したため、日付オブジェクトの受信月パラメータは11 + 1=12です。12は有効な月ではありません(前述のように、0〜11は有効です、Jan = 0)したがって、あなたは気が狂います。:)

于 2012-12-17T20:51:45.970 に答える
1

これをチェックしてください:

Days d = Days.daysBetween(startDate, endDate);
int days = d.getDays();
http://joda-time.sourceforge.net/faq.html#datediff

あなたの問題の1つは、あなたが月に+1し、月が0から11になることです(私が知っている愚かな)ので、11+1は12です。これは無効です。(設定できる厳しさがあると思います)

于 2012-12-17T20:43:46.467 に答える
1

month + 1必要な代わりに、month-111->0もラップします。

date = new GregorianCalendar(year, (month == 0) ? 11 : month - 1, day);
于 2012-12-17T20:48:20.787 に答える