Преобразование строки в поле даты / микроиздание Java

Использование J2ME, netbeans 7.2, Разработка мобильного приложения..

Я преобразовал значение поля даты в строку и теперь хочу вернуть его в поле даты. Для этого мне нужно преобразовать строку обратно в Datefield, я использую следующий код, но этого не происходит.

long myFileTime = dateField.getDate().getTime(); // getting current/set date from the datefield into long
         String date = String.valueOf(myFileTime); // converting it to a String to put it back into a different datefield

         Date updatedate= stringToDate(date); // passing the string 'date' to the Method stringToDate() to convert it back to date.
                 dateField1.setDate(updatedate); // updating the date into the new datefield1

public Date stringToDate(String s) 
{
    Calendar c = Calendar.getInstance();

    c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(s.substring(0, 2)));
    c.set(Calendar.MONTH, Integer.parseInt(s.substring(3, 5)) - 1);
    c.set(Calendar.YEAR, Integer.parseInt(s.substring(6, 10)));

    return c.getTime();
}

person Ramesh Sivaraman    schedule 22.11.2012    source источник
comment
Не могли бы вы указать формат переменной myFileTime? Это 25122012 на 25 декабря 2012 года?   -  person nikkatsa    schedule 22.11.2012
comment
это в этом формате «25122012» плюс время.   -  person Ramesh Sivaraman    schedule 22.11.2012
comment
Я думаю, что причина, по которой ваш код работает плохо, заключается в том, что long myFileTime не в том формате, о котором вы думаете. Когда вы делаете Date.getTime(), он возвращает вам миллисекунды после 1 января 1970 года 00:00:00 по Гринвичу, а не длинный в формате 25122012. В этом случае вам поможет приведенный ниже пример кода.   -  person nikkatsa    schedule 22.11.2012
comment
Спасибо за предложение..   -  person Ramesh Sivaraman    schedule 22.11.2012


Ответы (1)


Поскольку вы упомянули, что у вас есть long myFileTime, вы сможете использовать:

Date updatedate=new Date(myFileTime);

Чтобы преобразовать обратно в вашу дату. Если доступен только ваш String, вы должны изменить свою функцию следующим образом:

public Date stringToDate(String s){
  Calendar c = Calendar.getInstance();

  c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(s.substring(0, 2)));
  c.set(Calendar.MONTH, Integer.parseInt(s.substring(2, 4))-1 );
  c.set(Calendar.YEAR, Integer.parseInt(s.substring(4, 8)));

  return c.getTime();
}

Обратите внимание на измененные индексы.

В Java SE вы должны иметь возможность использовать следующую строку вместо того, чтобы устанавливать каждое поле отдельно:

c.setTimeInMillis(Long.parseLong(s));

Поскольку в s у вас есть dateField.getDate().getTime(), равное myFileTime, количеству секунд, начиная с 1 января 1970 года, на основе предоставленного вами кода.

Ваш stringToDate должен работать, только если ваша строка будет иметь следующий формат: ddMMyyyy. Также обратите внимание, что в этом случае вы должны использовать SimpleDateFormat. для анализа, что-то вроде:

Date updatedate = new java.text.SimpleDateFormat("ddMMyyyy HH:mm:ss").parse(date);
person dan    schedule 22.11.2012
comment
Я понял, у меня тоже есть время. Итак, вы хотели использовать только указанную выше строку вместо всех элементов набора в методе stringToDate()? - person Ramesh Sivaraman; 22.11.2012
comment
Я не могу получить SimpleDateFormat, не могу добавить для этого библиотеку. Используя J2ME, так что... - person Ramesh Sivaraman; 22.11.2012
comment
@ raam030 Вы можете сделать и то, и другое, смотрите мой обновленный ответ. Если у вас есть myFileTime, вы должны использовать c.setTimeInMillis. - person dan; 22.11.2012
comment
Я получаю сообщение об ошибке при использовании c.setTimeInMillis, говорит: «не найден подходящий метод для« parseLong (long) »… - person Ramesh Sivaraman; 22.11.2012
comment
@ raam030 Long.parseLong(s) нужен String, а не long. Если у вас уже есть long, вы можете использовать напрямую: c.setTimeInMillis(your_long) или еще проще new Date(your_long) - person dan; 22.11.2012
comment
-1 в java ME MIDP/CLDC, Calendar.setTimeInMillis имеет значение protected, в отличие от общедоступного в Java SE. Кроме того, там нет SimpleDateFormat - пакета java.text вообще нет - person gnat; 22.11.2012
comment
@gnat Спасибо, не знал об этом. - person dan; 22.11.2012
comment
@ raam030 Смотрите мой обновленный ответ, некоторые из ваших первоначальных индексов немного сместились. - person dan; 22.11.2012
comment
это занимает много времени и правильно обновляет поле даты. Спасибо за помощь Дэн. Такая простая вещь, о которой я слишком много думал !!!!....Спасибо всем... long myFileTime = dateField.getDate().getTime(); date = String.valueOf (myFileTime); Дата d = новая дата (myFileTime); dateField1.setDate(д); - person Ramesh Sivaraman; 22.11.2012