2017-12-28 18 views
-4

Ich habe eine andere Klasse, die Kalender zu Benutzer und Setup-Datum in Textansicht zeigt. Aber wie bekomme ich das Datum (Jahr von hier? Für wie alt alt Benutzer im Allgemeinen).So erhalten Sie das Datum aus dem Kalender

Dies ist Code, den ich verwende. Dies ist: TextViewDatePicker editTextDatePicker = new TextViewDatePicker implement class, die Kalender für Benutzer und Setup-Datum in der Textansicht zeigt. Ich weiß für diesen Code nicht ho dieses Datum Setup: 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--; 
    } 

Und das ist Klasse, die Kalender für den Benutzer zeigt:

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

Als beiseite betrachten wegwerfen der lange überholten "Kalender" und "Datum" Klassen und Hinzufügen von [ThreeTenABP] (https://github.com/JakeWharton/ThreeTenABP) zu Ihrem Android-Projekt, um 'Java zu verwenden. Zeit, die moderne Java-API für Datum und Uhrzeit. Es ist so viel schöner, damit zu arbeiten. –

Antwort

0

Sie falsch Konstruktor für TextViewDatePicker verwendet

-Update Code:

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

mit

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

Okay, aber das über meine Antwort - wie Alter für Benutzer berechnen? – Slavik

+1

Diese "Antwort" scheint die Frage nicht zu beantworten. –

1

Dies geht viel einfacher mit java.time, der modernen Java-API für Datum und Uhrzeit.

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

Können Sie dies auf Android verwenden? Bestimmt! Für die meisten Android-Geräte müssen Sie ThreeTenABP, den Backport von java.time von Java 8 zu Android Java 7 bekommen. Alles ist in this question: How to use ThreeTenABP in Android Project (das ist ThreeTen für JSR-310, wo java.time wsa zuerst beschrieben wurde, und ABP für Android Backport) gut erklärt.

Bitte ersetzen Sie Ihre gewünschte Zeitzone, wenn es nicht zufällig America/Tortola ist.

Verwandte Themen