Andrew Lam
Andrew Lam

Reputation: 3804

DateFormat produce wrong year

Date picker

The above picture is the date picker, after I click OK, the result is shown below.

Text View

The code is as follow

public class DatePickerFragment extends DialogFragment
    implements DatePickerDialog.OnDateSetListener {

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);

    // Create a new instance of DatePickerDialog and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);
}

public void onDateSet(DatePicker view, int year, int month, int day) {
    // Do something with the date chosen by the user
    Date date = new Date(year, month, day);
    Fragment fragment = getActivity().getFragmentManager().findFragmentByTag(ConvocationAddDialogFragment.class.getName());
    TextView textView = (TextView) fragment.getView().findViewById(R.id.open_registration_date);
    textView.setText(DateFormat.getDateInstance().format(date));
}
}

The expected value is 18 Jan 2016, why is it displaying 18 Jan 3916?

Upvotes: 2

Views: 2824

Answers (2)

Vivek Mishra
Vivek Mishra

Reputation: 5705

Use it like this

public static class DatePickerFragment extends DialogFragment
        implements DatePickerDialog.OnDateSetListener {

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // Use the current date as the default date in the picker
        tv_date= (TextView)getActivity().findViewById(R.id.tv_date);
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);

        dialog.getDatePicker().setMinDate(c.getTimeInMillis());


        return dialog;
    }

    public void onDateSet(DatePicker view, int year, int month, int day) {
        // Do something with the date chosen by the user
        tv_date.setText(new StringBuilder().append(day).append("-")
                .append(month+1).append("-").append(year));
        date=tv_date.getText().toString();
    }
}

Upvotes: 0

Dhaval Patel
Dhaval Patel

Reputation: 10299

As per Source code new Date(year, month, day);

public Date(int year, int month, int day) {
    GregorianCalendar cal = new GregorianCalendar(false);
    cal.set(1900 + year, month, day);
    milliseconds = cal.getTimeInMillis();
}

Here, Your year 2016 will get added to 1900 , which result into 3916.

Try,

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
calendar.set(Calendar.DAY_OF_MONTH, day);
Date date = calendar.getTime();

Upvotes: 14

Related Questions