2013-06-17 6 views
4

Я пытаюсь сделать один из моих классов Parcelable, и одним из его атрибутов является объект Date.Parcelable java.util.Date

В методе writeToParcel() У меня есть:

out.writeLong(myDate.getTime()); 

И в моем методе createFromParcel() У меня есть

person.setDate(new Date(in.readLong() * 1000)); 

объект, который я передаю мое Намерение есть дата создания как это:

new Date(2000,12,06) 

Но, когда я прочитал его на другую сторону, в другой деятельности:

myDate.getYear()+"-"+myDate.getMonth()+"-"+myDate.getDay() 

Он печатает «2001-0-0»

Я предполагаю, что что-то становится облажался в процессе посылки?

ответ

3

Вы пишете миллисекунды с эпохи Unix (см. the documentation for getTime()).

Конструктор Date, который принимает значение long, берет за миллисекунд с эпохи Unix (см. the documentation for that constructor).

Вы, напротив, проходите через микросекунды с эпохи Unix к конструктору. Просто передайте значение readLong() в конструктор Date и посмотрите, поможет ли это.

+0

так вы предлагаете мне просто удалить * 1000? – user1154644

+0

@ user1154644: Да. – CommonsWare

+0

Тот же результат, '2001-0-0' – user1154644

1

Ваша ошибка в том, как вы создаете объект Date, для получения дополнительной информации о нем обратитесь к documentation.

Параметры

год, 0 является 1900 (например 100 2000).

месяц года, 0 - 11 (например, июнь - 5).

день месяца, 1 - 31 (не думаю, что это пример).

, как вы можете видеть, когда вы делаете это «новый Дата (2000,12,06)», вы не создавая даты вы думали, что создание на первом месте. Также не рекомендуется, чтобы метод был устарел с API 1, поэтому, пожалуйста, не используйте его, если вы не нацеливаете на API 1, что я не думаю, что кто-то это делает больше.

Также, как CommonsWare сказал вам, удалите 1000 в конце во время чтения.

Смежные вопросы