Проблема с отметкой времени показывает 1970 вместо 1988

Я пытаюсь установить значение по умолчанию в DateField, используя следующую инструкцию

DateField dateField = новое DateField ("День рождения:", 567993600, DateField.DATE | DateField.FIELD_LEFT);

но когда я запускаю свое приложение, оно показывает мне 7 января 1970 года, а не 1 января 1988 года.

Я проверил отметку времени на http://www.onlineconversion.com/unix_time.htm

и он показывает мне правильную ожидаемую дату: «Пт, 01 января 1988, 00:00:00 по Гринвичу».

Я использую симулятор 8900, и моя дата верна, показывая сегодняшнюю дату 31 декабря 2010 года в дате в папке параметров.

С уважением,

-gmuhammad


person gmuhammad    schedule 31.12.2010    source источник


Ответы (2)


В поле даты используются миллисекунды. Вам нужно умножить время на 1000.

Изменить: убедитесь, что вы используете длинные значения (например, 5679936001000l или 567993600l * 1000). Используя целые числа, умножение переполняется.

person Martin v. Löwis    schedule 31.12.2010

Следующий код работает:

DateField dateField = new DateField ("День рождения:", 567993600000L, DateField.DATE | DateField.FIELD_LEFT);

Мартин, вы ответили правильно, но после умножения на 1000 произошло переполнение, компилятор использовал целое число для литералов. Поэтому я добавляю в конце три нуля вместо умножения на 1000.

Спасибо, Мартин.

person gmuhammad    schedule 31.12.2010
comment
Для всех, большинство сайтов в Интернете используют UTC без миллисекунд, поэтому будьте осторожны, если вы разрабатываете для Blackberry. - person gmuhammad; 31.12.2010
comment
@Arhimed: вы не поняли сути, я также согласен с ответом Маритина, но, как вы можете видеть после многократного использования с 1000, у вас может быть переполнение, если вы явно не добавляете L (для обработки компилятором), что также указанный Мартином (после того, как он отредактировал свой ответ). Поэтому вместо умножения на 1000 лучше добавить 3 нуля с L, чтобы удовлетворить компилятор. - person gmuhammad; 06.01.2011