Android, como posso converter String para data?

142

Eu armazeno o horário atual no banco de dados toda vez que o aplicativo é iniciado pelo usuário.

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

No lado do banco de dados, eu guardo o horário atual como string (como você pode ver no código acima). Portanto, quando o carrego do banco de dados, preciso convertê-lo no objeto Date. Eu vi alguns exemplos que todos eles usaram "DateFormat". Mas meu formato é exatamente igual ao formato Data. Então, acho que não há necessidade de usar "DateFormat". Estou certo?

Existe alguma maneira de converter diretamente esse objeto String para Date? Eu quero comparar esse tempo armazenado com o tempo atual.

obrigado

======> atualização

Obrigado queridos. Eu usei o seguinte 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
fonte

Respostas:

419

Da Cadeia de caracteres até 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();  
}

Da Data à 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();  
}
user370305
fonte
Exatamente - é melhor aplicar algum formulário padrão à sequência de datas antes de armazená-la no banco de dados. Nesse caso, en.wikipedia.org/wiki/ISO_8601
denis.solonenko 20/12
Para uma solução mais estritamente funcional em "string to date", é conveniente adicionar "format.setLenient (false);" antes da tentativa ... pegar bloco. Dessa forma, a verificação de uma data de cadeia anteriormente correta será melhor.
Alec
Eu não acredito que SimpleDateFormat.format()lança uma exceção
alguém em algum lugar
2
se a sua versão SDK maior ou igual a Marshmallow, em seguida, usar como esta 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
fonte
2
não é suposto analisar String como uma variável? Porque dessa maneira, ele está tentando analisar a palavra "string".
21715 Marco Marco
6

usando a classe SimpleDateFormat ou DateFormat por meio de

por exemplo

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

aqui é o seu objeto Date data ea saída é:

Quarta-feira 14 mar 13:30:00 UTC 2018

14 Mar 2018

Janku
fonte
Muito obrigado!
Maryoomi1
1

Pode ser uma boa idéia ter cuidado com o Local do qual c.getTime().toString();depende.

Uma idéia é armazenar o tempo em segundos (por exemplo, tempo UNIX ). Como um, intvocê pode facilmente compará-lo e depois convertê-lo em string ao exibi-lo para o usuário.

JOG
fonte
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
fonte