2

Java が Date オブジェクトから日を取得する方法を明確にしないのはなぜですか?

.getDay()廃止されました。使用することをお勧めしますCalendar.get(Calendar.MONTH)

これは私にはほとんど意味がなく、この非推奨の背後にある理論的根拠が何であるかに興味がありました.

Date オブジェクトがあり、その日だけが必要です。それはこれまでで最も自然なことであり、私はそれを呼び出すことはできません. この設計は間違っているため、コードが正常に動作していません。

private String getIngivningsDag() {

    return ""+ingivningsDatum.getDate();
}



private String getIngivningsMonth() {

    return ""+ingivningsDatum.getmonth();
}

private String getIngivningsYear() {

    return ""+ingivningsDatum.getYear();
}

アップデート

ここに「解決策」があります:

public String getIngivningsDag() {

    Calendar cal = Calendar.getInstance();
    cal.setTime(ingivningsDatum);
    return cal.get(Calendar.DAY_OF_WEEK_IN_MONTH)+"";
}

Java の設計エラーがなく、奇妙なクラス メソッドやファクトリの代わりにメソッド パラメーターを使用することで、シンプルで見栄えがよくなる方法を次に示します。

public String getIngivningsDag() {

    return ingivningsDatum.getDay(Calendar.GREGORIAN, "SE");
}
4

6 に答える 6

4

Date瞬間を意味しますが、正確な日/月/時間などは、カレンダーやタイムゾーンによって異なります。したがって、特定のタイムスタンプが何日であるかを知るには、 と を使用する必要がCalendar TimezoneありDateFormatます。たとえば、jdk には少なくとも 2 つのカレンダー実装があります - BuddistCalendar と GregorianCalendar です。デフォルトのカレンダーは、ユーザーの好みによって異なります。

また、Jodatime ライブラリを見てください。より多くの機能があり、Java で日付を管理するのがより理にかなっています。

于 2012-10-22T12:45:54.793 に答える
3

そのメソッドだけでなく、Dateクラスのほとんどのメソッドと一部のコンストラクターは非推奨になりました。、またはDateオブジェクトからCalendar取得するには、クラスを使用する必要があります。DAYMONTH

ただし、試してみることをお勧めします。これにより、クラスでさえ、そこから始まるのインデックス作成に関してはJoda-Time API、より幸せになります。Calendarbit inconsistentMONTH0

しかし、それでも、現在の問題については、次を使用してDateオブジェクトをCalendarインスタンスに変換できます。

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

System.out.println(cal.get(Calendar.MONTH));
于 2012-10-22T12:47:52.577 に答える
2

ドキュメントから:

JDK 1.1 より前は、クラス Date に 2 つの追加機能がありました。これにより、日付を年、月、日、時、分、および秒の値として解釈できました。また、日付文字列のフォーマットと解析も可能でした。残念ながら、これらの関数の API は国際化に対応していませんでした。JDK 1.1 では、Calendar クラスを使用して日付フィールドと時刻フィールドを変換し、DateFormat クラスを使用して日付文字列をフォーマットおよび解析する必要があります。Date の対応するメソッドは非推奨です。

日付の定義も考慮してください

クラス Date は、ミリ秒の精度で特定の瞬間を表します。

それにカレンダー機能を追加することは、間違いなく単一責任の原則に違反します。

于 2012-10-22T12:46:00.183 に答える
1

まず第一に、デザインが間違っていると怒っても何の役にも立ちません。

第二にCalendar.getDay(Calendar.MONTH)、静的な方法ではありません。あなたの化合物にアクセスするには、3つのステップでクラスDateを使用します。Calendar

  1. Calendar呼び出してインスタンスを作成するCalendar cal = Calendar.getInstance()
  2. Calendar呼び出してインスタンスに日付を設定しますCalendar.setTime(date)
  3. 呼び出して月を取得するcal.get(Calendar.MONTH)
于 2012-10-22T12:49:40.990 に答える
1

最も簡単な解決策は、それが行われた理由を見つけるのではなく、Joda-Timeを使用することです。

于 2012-10-22T12:47:16.300 に答える
1

java.Date は、1970 年 1 月 1 日からのミリ秒数を格納するために使用されます。getDay() や dayOfWeek() などの Calendar 機能が必要な場合は、Calendar クラスを使用する必要があります。

于 2012-10-22T12:46:03.330 に答える