2017-12-28 3 views
-4

사용자에게 캘린더를 보여주고 텍스트 뷰에서 설정 날짜를 보여주는 다른 클래스가 있습니다. 그러나 날짜를 얻는 방법 (여기에서 년? 일반적으로 노년기 사용자를 계산하는 방법).캘린더에서 날짜를 얻는 방법

이것은 내가 사용하고있는 코드입니다. 이것은 : TextViewDatePicker editTextDatePicker = new TextViewDatePicker implement class이며 사용자의 일정과 텍스트보기의 설정 날짜를 보여줍니다. 나는 설정이 코드에 대한이 날짜 호 모른다 : Calendar dateOfYourBirth = new GregorianCalendar();

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.profile_fragment); 
    editTextForAge = (TextView) findViewById(R.id.ed_calendar); 
    Window window = this.getWindow(); 

     TextViewDatePicker editTextDatePicker = new TextViewDatePicker(ProfileGeneral.this, editTextForAge); 

    Calendar dateOfYourBirth = new GregorianCalendar(); 

    Calendar today = Calendar.getInstance(); 
    int yourAge = today.get(Calendar.YEAR) - dateOfYourBirth.get(Calendar.YEAR); 
    dateOfYourBirth.add(Calendar.YEAR, yourAge); 
    if (today.before(dateOfYourBirth)) { 
     yourAge--; 
    } 

을 그리고 이것은 사용자의 일정을 보여주는 클래스 :

public class TextViewDatePicker 
    implements View.OnClickListener, DatePickerDialog.OnDateSetListener { 
public static final String DATE_SERVER_PATTERN = "yyyy-MM-dd"; 
private DatePickerDialog mDatePickerDialog; 
private TextView mView; 
private Context mContext; 
private long mMinDate; 
private long mMaxDate; 

public TextViewDatePicker(Context context, TextView view) { 
    this(context, view, 0, 0); 
} 

public TextViewDatePicker(Context context, TextView view, long minDate, long maxDate) { 
    mView = view; 
    mView.setOnClickListener(this); 
    mView.setFocusable(false); 

    mContext = context; 
    mMinDate = minDate; 
    mMaxDate = maxDate; 
} 

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
    Calendar calendar = Calendar.getInstance(); 
    calendar.set(Calendar.YEAR, year); 
    calendar.set(Calendar.MONTH, monthOfYear); 
    calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
    Date date = calendar.getTime(); 

    SimpleDateFormat formatter = new SimpleDateFormat(DATE_SERVER_PATTERN); 
    mView.setText(formatter.format(date)); 
} 

@Override 
public void onClick(View v) { 
    Calendar calendar = Calendar.getInstance(TimeZone.getDefault()); 
    mDatePickerDialog = new DatePickerDialog(mContext, this, calendar.get(Calendar.YEAR), 
      calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); 
    if (mMinDate != 0) { 
     mDatePickerDialog.getDatePicker().setMinDate(mMinDate); 
    } 
    if (mMaxDate != 0) { 
     mDatePickerDialog.getDatePicker().setMaxDate(mMaxDate); 
    } 
    mDatePickerDialog.show(); 
} 
+1

오래 걸리던'Calendar'와'Date' 클래스를 버리고 Android 프로젝트에 [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP)를 추가하여'java를 사용하십시오. 시간', 현대 자바 날짜와 시간 API. 함께 일하는 것이 훨씬 더 멋지다. –

답변

0

당신은 TextViewDatePicker

에 대한

업데이트 잘못된 생성자를 사용 코드 :

TextViewDatePicker editTextDatePicker = new TextViewDatePicker(ProfileGeneral.this, editTextForAge); 
TextViewDatePicker editTextDatePicker = new TextViewDatePicker(ProfileGeneral.this, editTextForAge,0,0); 
+0

그래,하지만 그건 내 대답에 대한 - 사용자 연령을 계산하는 방법? – Slavik

+1

이 "대답"은 질문에 대답하지 않는 것 같습니다. –

1

현대 Java 날짜 및 시간 API 인 java.time을 사용하면 훨씬 쉽게 처리 할 수 ​​있습니다.

@Override 
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
    // date picker month is 0-based, so add 1 to it 
    LocalDate datePickerDate = LocalDate.of(year, monthOfYear + 1, dayOfMonth); 
    mView.setText(datePickerDate.toString()); 

    LocalDate today = LocalDate.now(ZoneId.of("America/Tortola")); 
    long yourAge = ChronoUnit.YEARS.between(datePickerDate, today); 
} 

Android에서 사용할 수 있습니까? 확실히! 대부분의 안드로이드 디바이스의 경우, Java 8에서 Android Java 7까지 java.time의 백 포트 인 ThreeTenABP를 가져와야합니다. this question: How to use ThreeTenABP in Android Project (즉, JSR-310의 경우 ThreeTen이며, java.time은 처음 설명되었고 Android Backport의 경우 ABP)에 설명되어 있습니다.

미국/토르 톨라가 아닌 경우 원하는 시간대로 바꾸십시오.

관련 문제