Android, comment puis-je convertir une chaîne en date?

142

Je stocke l'heure actuelle dans la base de données chaque fois que l'application démarre par l'utilisateur.

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

Côté base de données, je stocke l'heure actuelle sous forme de chaîne (comme vous le voyez dans le code ci-dessus). Par conséquent, lorsque je le charge à partir de la base de données, je dois le convertir en objet Date. J'ai vu des échantillons que tous avaient utilisé "DateFormat". Mais mon format est exactement le même que le format Date. Donc, je pense qu'il n'est pas nécessaire d'utiliser "DateFormat". Ai-je raison?

Est-il possible de convertir directement cet objet String en date? Je veux comparer cette heure stockée avec l'heure actuelle.

Merci

======> mise à jour

Merci chers gars. J'ai utilisé le code suivant:

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
la source

Réponses:

420

De la chaîne à la date

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 la date à la chaîne

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
la source
Exactement - il est préférable d'appliquer une forme standard à la chaîne de date avant de la stocker dans la base de données. Dans ce cas en.wikipedia.org/wiki/ISO_8601
denis.solonenko
Pour une solution plus strictement fonctionnelle sur "string to date", il est pratique d'ajouter "format.setLenient (false);" avant le bloc try ... catch. De cette façon, la vérification d'une date de chaîne autrefois correcte sera meilleure.
Alecs
Je ne crois pas que cela SimpleDateFormat.format()jette une exception
Someone Somewhere
2
si votre version de SDK est supérieure ou égale à Marshmallow, utilisez comme ceci 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
la source
2
il n'est pas supposé analyser String comme une variable? Parce que de cette façon, il essaie d'analyser le mot «chaîne».
Marco
6

en utilisant la classe SimpleDateFormat ou DateFormat via

par exemple

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

voici la date de votre objet Date et la sortie est:

Mer 14 mars 13:30:00 UTC 2018

14 mars 2018

Janku
la source
Merci beaucoup!
Maryoomi1
1

Il peut être judicieux de faire attention aux paramètres régionaux dont c.getTime().toString();dépend.

Une idée est de stocker l'heure en secondes (par exemple l' heure UNIX ). En tant intque tel, vous pouvez facilement le comparer, puis le convertir en chaîne lors de son affichage à l'utilisateur.

FAIRE DU JOGGING
la source
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
la source