Android, come posso convertire la stringa in data?


142

Memorizzo l'ora corrente nel database ogni volta che l'applicazione viene avviata dall'utente.

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

Nel lato database, memorizzo l'ora corrente come stringa (come vedi nel codice sopra). Pertanto, quando lo carico dal database, devo eseguirne il cast sull'oggetto Date. Ho visto alcuni esempi che tutti avevano usato "DateFormat". Ma il mio formato è esattamente uguale al formato data. Quindi, penso che non sia necessario utilizzare "DateFormat". Ho ragione?

Esiste un modo per trasmettere direttamente questo oggetto String to Date? Voglio confrontare questo tempo memorizzato con l'ora corrente.

Grazie

======> aggiornamento

Grazie cari ragazzi. Ho usato il 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;            

   }

Risposte:


419

Da stringa a data

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();  
}

Dalla data alla stringa

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();  
}

Esatto: è meglio applicare un modulo standard alla stringa di data prima di memorizzarlo nel database. In questo caso en.wikipedia.org/wiki/ISO_8601
denis.solonenko il

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

Non credo che SimpleDateFormat.format()costituisca un'eccezione
Someone Somewhere

2
se la tua versione dell'SDK è maggiore o uguale a Marshmallow, usa in questo modo SimpleDateFormat dateFormat =new SimpleDateFormat(""yyyy-MM-dd'T'HH:mm:ss'Z'"", Locale.getDefault());
Dheeraj Jaiswal

8
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = dateFormat.parse(datestring)

2
non si suppone di analizzare String come variabile? Perché in questo modo, sta cercando di analizzare la parola "stringa".
Marco,

6

utilizzando la classe SimpleDateFormat o DateFormat tramite

per es

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
}

4
     import java.text.ParseException;
     import java.text.SimpleDateFormat;
     import java.util.Date;
     public class MyClass 
     {
     public static void main(String args[]) 
     {
     SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");

     String dateInString = "Wed Mar 14 15:30:00 EET 2018";

     SimpleDateFormat formatterOut = new SimpleDateFormat("dd MMM yyyy");


     try {

        Date date = formatter.parse(dateInString);
        System.out.println(date);
        System.out.println(formatterOut.format(date));

         } catch (ParseException e) {
        e.printStackTrace();
         }
    }
    }

qui è la data di oggetto data e l'uscita è:

Mer 14 Mar 13:30:00 UTC 2018

14 mar 2018


Grazie mille!
Maryoomi1,

1

Potrebbe essere una buona idea stare attenti al Locale da cui c.getTime().toString();dipende.

Un'idea è quella di memorizzare il tempo in secondi (es. Tempo UNIX ). Come intsi può facilmente confrontare, e poi basta convertirlo in stringa quando la visualizzazione all'utente.


1
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);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.