2013-07-16 26 views
6

Tôi cố gắng lấy ngày từ edittext trong Android, nhưng mã trả lại văn bản sai.Ngày từ EditText

mã 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"; 

mã XML:

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

Khi tôi viết văn bản "23-08-2013" trong EditText, mã trở lại "5-7-113-abcd". Chuyện gì thế? Làm cách nào để có được ngày chính xác từ EditText?

Trả lời

7

getDay() trả về ngày trong tuần, do đó, điều này là sai. Sử dụng getDate().

getMonth() bắt đầu bằng số không, do đó bạn cần phải thêm 1 vào nó.

getYear() trả về giá trị là kết quả trừ 1900 từ năm, do đó bạn cần phải thêm 1900 vào số đó.

abcd - tốt, bạn được một cách rõ ràng và thêm rằng đến cuối của chuỗi vì vậy không ngạc nhiên đó :)

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(); 
} 

Tất cả những không được tán thành và mặc dù bạn thực sự cần sử dụng một Calendar để thay thế.

Edit: ví dụ nhanh của Calendar

Calendar cal = Calendar.getInstance(); 
cal.setTime(myDate); 
cal.get(Calendar.DAY_OF_MONTH); // and so on 
+0

Cảm ơn bạn :) Làm thế nào tôi có thể sử dụng Calenda để làm điều đó? Tôi đã cố gắng để có được ngày từ trường hợp lịch, nhưng resualts đã sai. –

+0

Xem câu trả lời của tôi, tôi chỉ chỉnh sửa nó –

+0

Vâng, tôi không thực sự chắc chắn những gì bạn đang cố gắng làm kể từ trong ví dụ của bạn dường như bạn đang chuyển đổi thành ngày chỉ để chuyển đổi chính xác sang cùng một chuỗi. Sử dụng lịch cho các phép tính liên quan đến ngày tháng. Dù sao, hy vọng rằng sẽ giúp. –

2

Xin vui lòng, don `t ngại nhìn vào tài liệu Java. Các phương pháp này không được chấp nhận. (Và btw bạn đang sử dụng phương pháp sai để nhận giá trị) Sử dụng Lịch:

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); 
+0

Bạn không thể trực tiếp xây dựng Lịch. Sử dụng Calendar.getInstance() để thay thế. –

+0

@ JohnLindal cảm ơn, đã sửa câu trả lời –

0

doc Android luôn là tài liệu tham khảo tốt nhất. đây là một mắt xích của các trang Lịch doc:

http://developer.android.com/reference/java/util/Calendar.html

+1

Trong khi điều này về lý thuyết có thể trả lời câu hỏi, [nó sẽ là thích hợp hơn] (// meta.stackoverflow.com/q/8259) để bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. –