2011-12-20 15 views
83

Memorizzo l'ora corrente nel database ogni volta che l'applicazione viene avviata dall'utente.Android, Come posso convertire la stringa in data?

Calendar c = Calendar.getInstance(); 
    String str = c.getTime().toString(); 
    Log.i("Current time", str); 

Nel lato database, memorizzo l'ora corrente come stringa (come si vede nel codice precedente). Pertanto, quando lo carico dal database, ho bisogno di lanciarlo su oggetto Date. Ho visto alcuni campioni che tutti avevano usato "DateFormat". Ma il mio formato è esattamente uguale al formato della data. Quindi, penso che non sia necessario usare "DateFormat". Ho ragione?

Esiste comunque un cast diretto per questo oggetto String to Date? Voglio confrontare questo tempo memorizzato con l'ora corrente.

Grazie

======> aggiornamento

Grazie cari ragazzi. Ho usato seguente codice:

private boolean isPackageExpired(String date){ 
     boolean isExpired=false; 
     Date expiredDate = stringToDate(date, "EEE MMM d HH:mm:ss zz yyyy");   
     if (new Date().after(expiredDate)) isExpired=true; 

     return isExpired; 
    } 

    private Date stringToDate(String aDate,String aFormat) { 

     if(aDate==null) return null; 
     ParsePosition pos = new ParsePosition(0); 
     SimpleDateFormat simpledateformat = new SimpleDateFormat(aFormat); 
     Date stringDate = simpledateformat.parse(aDate, pos); 
     return stringDate;    

    } 

risposta

251

Da stringa ad oggi

String dtStart = "2010-10-15T09:27:37Z"; 
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
try { 
    Date date = format.parse(dtStart); 
    System.out.println(date); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 

da data a String

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 
try { 
    Date date = new Date(); 
    String dateTime = dateFormat.format(date); 
    System.out.println("Current Date Time : " + dateTime); 
} catch (ParseException e) { 
    e.printStackTrace(); 
} 
+0

Esattamente - è meglio applicare un modulo standard alla stringa di data prima di memorizzarlo nel database. In questo caso http://en.wikipedia.org/wiki/ISO_8601 –

+0

Per una soluzione più strettamente funzionante su "stringa fino alla data", è conveniente aggiungere "format.setLenient (false);" prima del tentativo ... cattura blocco. In questo modo il controllo di una data della stringa precedentemente corretta sarà migliore. – Alecs

6
SimpleDateFormat dateFormat = new SimpleDateFormat("DD-MM-YYYY"); 
Date d = dateFormat.parse(datestring) 
+2

non è necessario analizzare String come variabile? Perché in questo modo, sta cercando di analizzare la parola "stringa". –

+0

YYYY e DD sono errati, yyyy e dd è vero –

5

utilizzando SimpleDateFormat o DateFormat classe attraverso

per esempio

try{ 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); // here set the pattern as you date in string was containing like date/month/year 
Date d = sdf.parse("20/12/2011"); 
}catch(ParseException ex){ 
    // handle parsing exception if date string was different from the pattern applying into the SimpleDateFormat contructor 
} 
0

Potrebbe essere una buona idea di stare attenti con le impostazioni internazionali su cui c.getTime().toString(); dipende.

Un'idea è quella di memorizzare il tempo in secondi (ad esempio UNIX time). Come int puoi facilmente confrontarlo e quindi devi semplicemente convertirlo in stringa quando lo si visualizza all'utente.

0
String source = "24/10/17"; 

String[] sourceSplit= source.split("/"); 

int anno= Integer.parseInt(sourceSplit[2]); 
int mese= Integer.parseInt(sourceSplit[1]); 
int giorno= Integer.parseInt(sourceSplit[0]); 

    GregorianCalendar calendar = new GregorianCalendar(); 
    calendar.set(anno,mese-1,giorno); 
    Date data1= calendar.getTime(); 
    SimpleDateFormat myFormat = new SimpleDateFormat("20yy-MM-dd"); 

    String dayFormatted= myFormat.format(data1); 

    System.out.println("data formattata,-->"+dayFormatted); 
Problemi correlati