2

データオブジェクトから月と年を抽出する際に問題が発生します。

String strdate = "2012-11-07T13:28:23";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
// Date date = dateFormat.parse(strdate);
Date date = new Date();
System.out.println(date.getDate());
System.out.println(date.getYear());
System.out.println(date.getMonth());
System.out.println(date);

私の出力は次のようなものです

28
112
10
Wed Nov 28 15:37:30 IST 2012

ここで何が問題になっていますか?

4

7 に答える 7

4

ここで何が問題になっていますか?

コンパイラは警告を介して何が問題なのかを教えてくれるはずです。まず、で非推奨のメソッドを使用していますDate。それらの警告を無視しないでください。

Calendaraにはカレンダーシステムとタイムゾーンが関連付けられているため、日/月/年などの値を取得するために使用Calendarする必要があります。これらは両方とも、適切な値を取得するために必要です。

次に、andを使用する代わりに、現在のstrdate日付と時刻を取得しているという問題がありますdateFormat

// Date date = dateFormat.parse(strdate);
Date date = new Date();

new Date()システムによって報告された現在の日付/時刻を常に返します。

ただし、112と10で混乱している場合は、呼び出しているメソッドのドキュメントを読む必要があります。これは、getYear()1900に基づいて年を返すことを説明しています(したがって、112の戻り値は年が2012であることを意味します)。そしてgetMonth()、0ベースの月を返します(つまり、January = 0)。呼び出しているメソッドのドキュメントを常に読んでください。特に、メソッドが奇妙な結果をもたらしていると思われる場合はそうです。

ただし、理想的には、代わりにJodaTimeを使用する必要があります。これは組み込みのAPIよりもはるかに賢明な日時APIです。

于 2012-11-28T10:11:25.817 に答える
2

Year基づいて1900いるので1900 + 112、2012年と呼んでいます。

Month0ベース(1月は0か月)なので、1を追加する必要があります。

とにかく、これらのメソッドは非推奨GregorianCalendarであるため、その日付に基づいて構築されたものを使用して、その情報(およびその他多数)を取得することをお勧めします。Date

myGregorianCalendar.get(GregorianCalendar.MONTH);
于 2012-11-28T10:11:28.853 に答える
1

と言うと、現在の日付と時刻を保持new Date()する新しいDateオブジェクトが作成されます。dateインスタンス化したばかりの値でメソッドを呼び出しています。

于 2012-11-28T10:11:38.000 に答える
1

代わりにカレンダーオブジェクトを使用してください

Calendar cal = Calendar.getInstance();
cal.setTime(date);
int month = cal.get(Calendar.MONTH);
int year=cal.get(Calendar.YEAR);

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Calendar.html

于 2012-11-28T10:11:41.317 に答える
1

何も悪いことはありません。date.getMonth()はゼロベースです(1月= 0)

于 2012-11-28T10:10:17.407 に答える
1

このコードを実行すると、次から正確な月、年、および日付が取得されます。

  String strdate = "2012-11-07T13:28:23";
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
  Date date = dateFormat.parse(strdate.toString());

  Calendar cal = Calendar.getInstance();
  cal.setTime(date);
  System.out.println("month = " + (cal.get(Calendar.MONTH) + 1 ));// add 1 because Month starts from 0 in java
  System.out.println("year = " + cal.get(Calendar.YEAR)) ;
  System.out.println("date = " + cal.get(Calendar.DATE));
  System.out.println(date);

私の出力は

month = 11
year = 2012
date = 7
Wed Nov 07 13:28:23 PKT 2012
于 2012-11-28T11:42:21.677 に答える