2017-12-28 19 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

古いJavaの 'Calendar'と' Date'クラスを捨てて、 'Javaを使うために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で使用できますか?確かに!ほとんどの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)。

アメリカ/トルトラではない場合は、ご希望のタイムゾーンを使用してください。

関連する問題