2011-12-27 4 views
2

В Android дата каждого события (например, дни рождения и юбилеи) сохраняется в формате String, например. "2011-12-24".Преобразование даты Android Строки к объектам даты

Это, по крайней мере, случай для моего телефона. Некоторые другие телефоны могут хранить эти даты в других форматах, если у них есть календарь, отличный от григорианского.

Даже для телефонов с григорианским календарем установлены даты с часами и минутами и без. Я получаю такую ​​строку даты, когда я запрашиваю таблицу контактов для события:

cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.ST‌​ART_DATE)) 

Это приводит к (например):

«2011-12-14» или «2011-12-24T00: 00: 00Z "

Вы можете видеть, что существует множество различных возможных форматов. Чтобы рассчитать с датами, мне нужно преобразовать их из объектов String в Date, не нужно ли мне?

Как это сделать?

PS: Я знаю, что есть функция синтаксического анализа для дат Java объектов:

DateFormat myDateFormat = new SimpleDateFormat("dd/MM/yy"); 
Date tempDate = myDateFormat.parse("24/12/2011"); 

Но в Android, я не знаю, какой формат я буду иметь дело с, не так ли?

ответ

3

Android работает с объектами даты. Каждый раз, когда вам нужно анализировать дату из строки, это потому, что эта дата была сериализована, скорее всего, в файле. В этом случае вы знаете формат, который был использован. Объект Date используется в настройках, объект даты используется почти везде, о котором я могу думать, что касается общих служб, действий и т. Д. Это означает, что почти никогда не нужно разбирать строку с даты, если, как я уже говорил, вы работаете с сериализованный источник, чтение его из веб-службы и т. д. Если вы можете сообщить нам свой сценарий, вы можете получить более конкретный ответ.

Вы можете получить текущий установленный формат даты, как это:

DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); 
+0

Спасибо за хороший и полезный ответ! Я запрашиваю таблицу контактов для события: cursor.getString (cursor.getColumnIndex (ContactsContract.CommonDataKinds.Event.START_DATE)) – caw

+0

... и здесь я получаю дату в форме String, например. "2011-12-24T00: 00: 00Z". Как я могу получить дату как объект Date? Нет метода «cursor.getDate()» ... – caw

+0

В этом случае вы можете проанализировать его. Кроме того, этот формат даты будет таким же, независимо от языка, поэтому вы можете смело предположить это. –

0
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

SimpleDateFormat myDateFormat = new SimpleDateFormat("dd/MM/yy"); 
     Date tempDate; 
     try { 
      tempDate = myDateFormat.parse("24/12/2011"); 
       long milliseconds=tempDate.getTime(); 
       Toast.makeText(getApplicationContext(), milliseconds+"", 1).show(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
Смежные вопросы