web-dev-qa-db-ja.com

EditTextからの日付

Androidのedittextから日付を取得しようとしましたが、コードが間違ったテキストを返します。

Javaコード:

SimpleDateFormat df = new SimpleDateFormat("dd-MM-YYYY"); 
Java.util.Date myDate;
myDate = df.parse(editText1.getText().toString());
String myText = myDate.getDay() + "-" + myDate.getMonth() + "-" + myDate.getYear() + "abcd";

XMLコード:

<EditText
                Android:id="@+id/editText1"
                Android:layout_width="match_parent"
                Android:layout_height="wrap_content"
                Android:ems="10"
                Android:inputType="date">

EditTextに「23-08-2013」というテキストを書くと、コードは「5-7-113-abcd」を返します。なにが問題ですか? EditTextから正しい日付を取得するにはどうすればよいですか?

7
Adam N

getDay()は曜日を返すので、これは間違っています。 getDate()を使用します。

getMonth()はゼロから始まるため、1を追加する必要があります。

getYear()は、年から1900を引いた結果の値を返すため、1900を加算する必要があります。

abcd-ええと、文字列の最後に明示的に追加しているので、驚くことはありません:)

SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); 
Date myDate;
try {
    myDate = df.parse(date);
    String myText = myDate.getDate() + "-" + (myDate.getMonth() + 1) + "-" + (1900 + myDate.getYear());
    Log.i(TAG, myText);
} catch (ParseException e) {
    e.printStackTrace();
}

ただし、これらはすべて非推奨であり、代わりにCalendarを使用する必要があります。

編集:Calendarの簡単な例

Calendar cal = Calendar.getInstance();
cal.setTime(myDate);
cal.get(Calendar.DAY_OF_MONTH); // and so on
10
Ken Wolf

Javaドキュメント。これらのメソッドは非推奨です。(そして、値を取得するために間違ったメソッドを使用しています)カレンダーを使用してください:

Calendar c = Calendar.getInstance();
c.setTime(myDate)
String dayOfMonth = c.get(Calendar.DAY_OF_MONTH);
String month = c.get(Calendar.MONTH);
String year = c.get(Calendar.YEAR);
2
Semyon Danilov

Android docは常に最良のリファレンスです。ここに、Calendardocページのリンクがあります。

http://developer.Android.com/reference/Java/util/Calendar.html

0
JúlioCézar