zoe vas
zoe vas

Reputation: 391

DatePickeDialog displays one month greater in android

When i press the button to display the DatePickerDialog, the dialog displays one month greater. For instance, if i initiate with the current date like this(with the DateTime of joda library):

   DateTimeZone zone = DateTimeZone.forID("Europe/Athens");

   DateTime dt = new DateTime(zone);


   int year = dt.getYear();
   int month = dt.getMonthOfYear();
   int day = dt.getDayOfMonth();

which is 07/08/2014, the date dialog displays one month greater 07/09/2014. I do not understand why this happens.

The fragment which represents the datePickerFragment is:

 @SuppressLint("ValidFragment")
    public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

        @SuppressLint("ValidFragment")
        TextView txtDate;
        GlobalData appState;


         public DatePickerFragment(TextView txtDate) {
            super();
            this.txtDate = txtDate;
        }

        @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                // Use the current date as the default date in the picker
                DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
                DateTime dt = new DateTime(zone);

                int year = dt.getYear();
                int month = dt.getMonthOfYear();
                int day = dt.getDayOfMonth();

                Log.i("DatePickerFragment day month year", day +" "+ month + " "+ year + "");

                // 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) {
                appState.setDateUserFrom(year, month, day);

                Log.i("Date day month yerar", "Date changed." +  day+" " + month + " " +year);
                txtDate.setText(new StringBuilder().append(day)
                       .append("-").append(month).append("-").append(year)
                       .append(" "));
            }



    }

Upvotes: 3

Views: 3251

Answers (5)

Pankaj Kumar
Pankaj Kumar

Reputation: 83028

DatePickerDialog takes monthOfYear that is 0 to 11 [0 for Jan... 11 for Dec], and your DateTime returns 1 to 12. So you need to do -1 with month value.

Use this:

return new DatePickerDialog(getActivity(), this, year, month - 1, day);

Upvotes: 12

Farhan Shah
Farhan Shah

Reputation: 2342

Try this hope it's worked:

DateTimeZone zone = DateTimeZone.forID("Europe/Athens");

       DateTime dt = new DateTime(zone);


       int year = dt.getYear();
       int month = dt.getMonth();
       int day = dt.getDayOfMonth();

OR

DateTimeZone zone = DateTimeZone.forID("Europe/Athens");

   DateTime dt = new DateTime(zone);


   int year = dt.getYear();
   int month = dt.getMonthOfYear() - 1;
   int day = dt.getDayOfMonth();

Upvotes: 0

Jossy Paul
Jossy Paul

Reputation: 1287

public Dialog onCreateDialog(Bundle savedInstanceState) {
                // Use the current date as the default date in the picker
                DateTimeZone zone = DateTimeZone.forID("Europe/Athens");
                DateTime dt = new DateTime(zone);

                int year = dt.getYear();
                int month = dt.getMonthOfYear()-1;
                int day = dt.getDayOfMonth();

                Log.i("DatePickerFragment day month year", day +" "+ month + " "+ year + "");

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

Month in date picker starts with zero. So you should subtract one from the getMonthOfYear() to set it on datepicker.

Upvotes: 2

Julian Pieles
Julian Pieles

Reputation: 4026

Just a guess. Joda month starts at 1 for january but java date at 0? So if you use the current date init with joda the date picker will show the wrong month. Easy solution:

month = dt.getMonthOfYear() - 1;

Upvotes: 1

Andy
Andy

Reputation: 10850

I am pretty sure the reason behind this is because the Android DatePickerDialog expects 0 based month values. Jodatime return them as you would expect it (more human friendly). So just subtract 1 from the month.

Just to clarify, most date functions/libraries are designed with 0 based month values by default. The exception is where explicitly noted, or third party libraries like Jodatime, which make working with date stuff a joy.

Upvotes: 0

Related Questions