2013-03-15 50 views
0

我在我的Android应用程序有一些奇怪的问题,当我拿起日期前,15march2013在日期选择器,我得到9october2007的Android的DatePicker挑错日期

这里是从sorces

public static class DatePickerFragment extends DialogFragment { 

    @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(), (OnDateSetListener)getActivity(), year, month, day); 
    } 

} 

public void onDateSet(DatePicker view, int year, int month, int day) { 
    d.setDate(day); 
    d.setMonth(month); 
    d.setYear(year); 
    int flags = 0; 
    flags |= DateUtils.FORMAT_SHOW_DATE; 
    flags |= DateUtils.FORMAT_SHOW_YEAR; 
    String str = DateUtils.formatDateTime(this, d.getTime(), flags); 
    date.setText(str); 
} 

其实我跑出片段的想法什么可能是错的 请帮助!

+0

你上哪儿去定义d对象? – 2013-03-15 02:27:12

+0

DatePickerFragment是嵌套类,所以d对象被定义在“主”类 – Mariusz 2013-03-15 02:37:54

回答

2

这些调用弃用:

d.setDate(day); 
    d.setMonth(month); 
    d.setYear(year); 

,而不是做你想什么。如果您追踪每次通话并观察变化,您会惊奇地发现只是将这些数额加到自身中。

而应该做这样的事情:

Calendar c = Calendar.getInstance(); 
c.set(year, month, day); 

SimpleDateFormat df = new SimpleDateFormat("d yyyy MMM"); 
String formattedDate = df.format(c.getTime()); 
date.setText(str); 

你可以在这里看到更多的日期格式选项:

http://developer.android.com/reference/java/text/SimpleDateFormat.html

+0

谢谢HaIR,日历正是我需要修复它 – Mariusz 2013-03-15 10:01:41

+0

不客气。我很高兴得到了帮助。 – HalR 2013-03-16 04:44:24

0

中,我正在实现这一目标的方式:

public class AddEditCourseActivity extends Activity { 
       private Button classStartBT; 
     private DatePickerDialog mDatePickerDialog; 
     private Calendar classStartDate; 
     private SimpleDateFormat mDateFormatter; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

       classStartDate = new GregorianCalendar(); 

       /** Initialize the mTimeFormatter object */ 
       mTimeFormatter = new SimpleDateFormat("yyyy dd, MM"); 

       classStartBT = (Button) findViewById(R.id.courseClassStartBT); 

    classStartBT.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 


mDatePickerDialog = new DatePickerDialog(
           MyActivity.this, mDateSetListener, 
           classStartDate.get(Calendar.YEAR), 
           classStartDate.get(Calendar.MONTH), 
           classStartDate.get(Calendar.DAY_OF_WEEK)); 



        mDatePickerDialog.show(); 

       } // end onClick 
      }); 

     } 


    private DatePickerDialog.OnDateSetListener mDateSetListener = new OnDateSetListener() { 

      @Override 
      public void onDateSet(DatePicker view, int year, int monthOfYear, 
int dayOfMonth) { 


        classStartTime.set(Calendar.HOUR_OF_DAY, hourOfDay); 
        classStartTime.set(Calendar.MINUTE, minute); 

        /** 
        * display the "class start time" on the buttons 
        */ 


    classStartBT.setText(mDateFormatter.format(classStartTime.getTime())); 

      } 
     }; 

    } // end activity