2017-01-05 2 views
3

У меня есть TimePickerDialog, вызываемый из onDateSetListener DatePickerDialog, чтобы позволить пользователю выбирать дату и время друг за другом. Я храню информацию в объекте Calendar calendar. Когда пользователь будет готов, они нажмут, чтобы сохранить эту и другую информацию в базе данных. Соответствующая часть, которая экономит время здесьДата/время за 6 часов позади Android

call.setContactTimestamp(new DateTime(calendar.getTimeInMillis()));

Где setContactTimestamp() сохраняет объект org.joda.time.DateTime к столу. Все это кажется прекрасным. Затем я показываю этот (и другие) данные обратно пользователю позже, используя этот соответствующий код TextView dateTime = (TextView) tableRow.findViewById(R.id.date_time); dateTime.setText(sdf.format(calls.get(i).getContactTimestamp().getMillis()));

Где SDF является SimpleDateFormat, который выглядит следующим образом SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a", Locale.US);

выпуска: Время отображается всегда ровно 6 часов по местному времени и времени, которое отображается на устройстве. Я следил за точками останова, и что действительно меня смутило, прежде чем данные будут сохранены, я оцениваю sdf.format(calendar.getTimeInMillis()) и показывает точное время. Когда я верну информацию, миллисекунды выключены.

Пример: Я открыл дату/времяPickerDialogs, и у него была текущая дата и время, 5 января 2017 года в 8:47:36. Я щелкнул, чтобы сохранить это, и оценил в приведенном выше инструкции сохранения. new DateTime(calendar.getTimeInMillis()) оценивается по 2017-01-05T08:47:36.322-06:00, что составило 1483627656322 millis. Затем я вытащил информацию для отображения, а возвращаемое значение joda.time.DateTime оценивалось до 2017-01-05T08:47:36.000Z, которое было 1483606056000 миллисов, ровно на 6 часов после того, что я спас в 2:47:36.

Вот мой DatePickerDialog и TimePickerDialog в случае, если это уместно. Если я оставил все, что вы думаете, важно, пожалуйста, дайте мне знать, я добавлю.

DatePickerDialog dpd = new DatePickerDialog(); 
dpd.setOnDateSetListener(new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePickerDialog dialog, int year, int monthOfYear, int dayOfMonth) { 
     calendar.set(Calendar.YEAR, year); 
     calendar.set(Calendar.MONTH, monthOfYear); 
     calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
     TimePickerDialog tpd = new TimePickerDialog(); 
     tpd.setOnTimeSetListener(new TimePickerDialog.OnTimeSetListener() { 
      @Override 
      public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) { 
       calendar.set(Calendar.HOUR_OF_DAY, hourOfDay); 
       calendar.set(Calendar.MINUTE, minute); 
       callDateTime.setText(sdf.format(calendar.getTime())); 
      } 
     }); 
     tpd.show(getActivity().getFragmentManager(), "tdp"); 
    } 
}); 
dpd.show(getActivity().getFragmentManager(), "dpd"); 
+0

Вы можете заменить SimpleDateFormat sdf = new SimpleDateFormat ("MM/dd/yyyy h: mm a", Locale.US) с SimpleDateFormat sdf = new SimpleDateFormat ("MM/dd/yyyy h: mm a", Locale.getDefault()); и попробуйте один раз? – Raghavendra

+0

Не повезло, но я ошибся. Расхождение должно быть в этой строке 'call.setContactTimestamp (новая DateTime (calendar.getTimeInMillis()));'. Например, я сохраняю 1483639217000 миллисов, но потом получаю 1483617617000 миллисов. Я до сих пор не понимаю, почему он спасает, а затем тянет разные миллионы? Создает ли объект DateTime из миллиса? – wizloc

+0

Итак, вы конвертируете время java в jodatime, и, получив jodatime, попробуйте преобразовать это в java-время как: new DateTime (calls.get (i) .getContactTimestamp()). ToCalendar (Locale.getDefault()) и попробовать? – Raghavendra

ответ

0

Попробуйте изменить

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a", Locale.US); 

в

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a", Locale.getDefault()); 

Май поможет вам!

+0

Это может быть из-за проблемы с TimeZone! –

+0

Извините, это не сработало, но я тоже ошибся. Пожалуйста, прочитайте мое редактирование. – wizloc

+0

Что такое ** dpd ** и ** tdp **? –