Android, ¿cómo puedo convertir cadenas a la fecha?

142

Almaceno la hora actual en la base de datos cada vez que la aplicación comienza por el usuario.

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

En el lado de la base de datos, almaceno la hora actual como una cadena (como puede ver en el código anterior). Por lo tanto, cuando lo cargo de la base de datos, necesito enviarlo al objeto Date. Vi algunas muestras de que todas habían usado "DateFormat". Pero mi formato es exactamente igual al formato de fecha. Entonces, creo que no hay necesidad de usar "DateFormat". Estoy en lo cierto?

¿Hay alguna forma de emitir directamente este objeto String to Date? Quiero comparar este tiempo almacenado con el tiempo actual.

Gracias

======> actualizar

Gracias queridos chicos. Usé el siguiente código:

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;            

   }
Hesam
fuente

Respuestas:

419

De cadena a fecha

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

De fecha a cadena

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();  
}
usuario370305
fuente
Exactamente: es mejor aplicar algún formulario estándar a la cadena de fecha antes de almacenarlo en la base de datos. En este caso es.wikipedia.org/wiki/ISO_8601
denis.solonenko
Para una solución más estrictamente funcional en "cadena hasta la fecha", es conveniente agregar "format.setLenient (false);" antes del intento ... atrapar bloque. De esta manera, la verificación de una fecha de cadena anteriormente correcta será mejor.
Alecs
No creo que eso SimpleDateFormat.format()arroje una excepción
alguien en algún lugar
2
si su versión de SDK es mayor o igual que Marshmallow, use así 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)
Hiren Dabhi
fuente
2
¿No se supone que analizar String como una variable? Porque de esta manera, está tratando de analizar la palabra "cadena".
Marco
6

usando la clase SimpleDateFormat o DateFormat a través de

por ej.

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

Aquí está la fecha del objeto Fecha y la salida es:

Mié 14 mar 13:30:00 UTC 2018

14 mar 2018

Janku
fuente
Muchas gracias!
Maryoomi1
1

Podría ser una buena idea tener cuidado con la configuración regional de la que c.getTime().toString();depende.

Una idea es almacenar el tiempo en segundos (p. Ej. tiempo UNIX ). Como intpuede compararlo fácilmente, y luego simplemente convertirlo en cadena cuando se lo muestra al usuario.

EMPUJONCITO
fuente
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);
paolixx
fuente