1

day_of_month、month、yearを整数のパラメーターにするにはどうすればよいですか?

DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
Calendar start_date = Calendar.getInstance();     
System.out.println(dateFormat.format(start_date.getTime()));

int day = start_date.get(Calendar.DAY_OF_MONTH);
int month = start_date.get(Calendar.MONTH);
int year = start_date.get(Calendar.YEAR);

String result = day + "/" + month + "/" + year;

ただし、今日の日付は01/12/12で、結果は01/11/12です。

4

6 に答える 6

10

これは予想される動作です。月は0から11になります。これを確認するには、次を発行します。

System.out.println(Calendar.JANUARY);

ちなみに、日付を文字列に変換するには、実際にはSimpleDateFormatを使用する必要があります

new SimpleDateFormat("dd/MM/yyyy").format(start_date.getTime());

(補足ですが、重要です。SimpleDateFormatはスレッドセーフではなく、スレッドセーフではないため、マルチスレッド環境で静的インスタンスとして使用して最適化しようとしないでください。これはAPIドキュメントにも記載されていますDate formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.:)

于 2012-12-01T12:38:04.637 に答える
1

月のインデックスは0から始まります。そのため、11が得られます。

0-1月。


12月11日

于 2012-12-01T12:38:43.070 に答える
1

Calendarクラスの Month は、1 月を表す 0 で始まり、12 月を表す 11 で終わります。

OpenJDK 6 -

public final static int JANUARY = 0;
...
public final static int DECEMBER = 11;
于 2012-12-01T12:38:46.183 に答える
1

のドキュメントからMONTH(強調は私のものです):

MONTH: 月を示す get および set のフィールド番号。これはカレンダー固有の値です。グレゴリオ暦とユリウス暦の年の最初の月は JANUARYで、これは 0です。最後は、1 年の月数によって異なります。

人間の暦は 1 月を 0 ではなく 1 から始めます。そのため、12 月は 12 ではなく 11 になります。

于 2012-12-01T12:39:05.877 に答える
1

java.util.Date やその他の Java の悪い部分を使用しないでください。

Java 8 以降、joda time は標準ライブラリに含まれるため、悪いコードを使用しても意味がありません。

http://joda-time.sourceforge.net/

これで問題はありません、私を信じてください。

于 2012-12-01T12:40:42.933 に答える
1

ドキュメントによると、 の結果はstart_date.get(Calendar.MONTH)0intから 11 の範囲で、0 は 1 月、11 は 12 月です。

Calendar.MONTH

于 2012-12-01T12:43:09.737 に答える