简体   繁体   中英

Date is not correct while setting in android

i am using following code. When i press an editText, it shows a calender and set the date.

          private DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

               public void onDateSet(DatePicker view, int year, 
                                     int monthOfYear, int dayOfMonth) {
                   mYear = year;
                   mMonth = monthOfYear;
                   mDay = dayOfMonth;
                   updateDisplay();
               }
           };

           private void updateDisplay() 
           {
            int cmpYear ;
            int cmpMonth ;
            int cmpDay;

            final Calendar c = Calendar.getInstance();
               cmpYear = c.get(Calendar.YEAR);
               cmpMonth = c.get(Calendar.MONTH);
               cmpDay = c.get(Calendar.DAY_OF_MONTH);

                if (cmpMonth == mMonth && cmpYear == mYear && cmpDay == mDay)   
                date.setText("Today");
            else if (cmpMonth == mMonth && cmpYear == mYear && cmpDay == (mDay - 1))
                date.setText("Yesterday");
            else
            {
                date.setText(
                        new StringBuilder()
                           // Month is 0 based so add 1
                           .append(mDay).append("-")
                           .append(mMonth + 1).append("-")
                           .append(mYear).append(" "));
            }

                java.util.Date today = new java.util.Date();
               long t = today.getTime();
               java.sql.Date dt = new java.sql.Date(t);

               dt.setYear(mYear);
               dt.setMonth(mMonth);
               dt.setDate(mDay);

               transaction.transactionDateTime =   dt;
            }

//HERE IS THE PROBLEM, mYear , mMonth , mDay shows correct values of 1,3,2012 but when i set them here in dt, dt saves mYear as 3079 not 2012. Please tell me how can i fix this date problem

Best REGARDS

I'm surprised it's giving you 3079 rather than 3912, which is what I'd expected given how Date.setYear is documented:

Sets the year of this Date object to be the specified value plus 1900. This Date object is modified so that it represents a point in time within the specified year, with the month, date, hour, minute, and second the same as before, as interpreted in the local time zone. (Of course, if the date was February 29, for example, and the year is set to a non-leap year, then the new date will be treated as if it were on March 1.)

Note that this is a deprecated method - you really shouldn't be using it.

Use Calendar for your calendar calculations, and then find the appropriate instant in time by calling calendar.getTime() . You can construct a java.sql.Date from that.

(Ideally, you'd use Joda Time instead, but that might be too big a dependency for you in an Android app.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM