176 votes

Android : Comment convertir une chaîne en date ?

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

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

Du côté de la 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 depuis la base de données, je dois le convertir en objet Date. J'ai vu quelques exemples qui ont tous utilisé "DateFormat". Mais mon format est exactement le même que celui de la date. Donc, je pense qu'il n'est pas nécessaire d'utiliser "DateFormat". Ai-je raison ?

Existe-t-il un moyen de convertir directement cette chaîne en objet Date ? Je veux comparer l'heure stockée avec l'heure actuelle.

Merci

\======> mise à jour

Merci les 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;            

   }

482voto

user370305 Points 46287

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

14voto

Hiren Dabhi Points 1721
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date d = dateFormat.parse(datestring)

7voto

Janku Points 188
     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 votre objet Date date et la sortie est :

Wed Mar 14 13:30:00 UTC 2018

14 mars 2018

6voto

Pratik Points 15125

En utilisant la classe SimpleDateFormat ou DateFormat à travers

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
}

3voto

deHaar Points 3169

Vous pouvez utiliser java.time dans Android maintenant, soit en utilisant Desugarisation de l'API Android ou l'importation de la ThreeTenAbp .

Avec java.time activé, vous pouvez effectuer les mêmes opérations avec moins de code et moins d'erreurs.

Supposons que vous transmettez un String contenant une date formatée selon la norme ISO, comme le fait la réponse actuellement acceptée.
Ensuite, les méthodes suivantes et leur utilisation dans un main peut vous montrer comment convertir de et vers String :

public static void main(String[] args) {
    String dtStart = "2010-10-15T09:27:37Z";
    ZonedDateTime odt = convert(dtStart);
    System.out.println(odt);
}

et

public static void main(String[] args) {
    String dtStart = "2010-10-15T09:27:37Z";
    OffsetDateTime odt = convert(dtStart);
    System.out.println(odt);
}

imprimera la ligne

2010-10-15T09:27:37Z

lorsqu'il existe les méthodes correspondantes

public static OffsetDateTime convert(String datetime) {
    return OffsetDateTime.parse(datetime);
}

o

public static ZonedDateTime convert(String datetime) {
    return ZonedDateTime.parse(datetime);
}

mais bien sûr pas dans la même classe, cela ne compilerait pas...

Il y a un LocalDateTime mais il ne serait pas en mesure d'analyser une zone ou un décalage.

Si vous souhaitez utiliser des formats personnalisés pour l'analyse syntaxique ou le formatage de la sortie, vous pouvez utiliser un fichier de type DateTimeFormatter peut-être comme ça :

public static void main(String[] args) {
    String dtStart = "2010-10-15T09:27:37Z";
    String converted = ZonedDateTime.parse(dtStart)
                                    .format(DateTimeFormatter.ofPattern(
                                                    "EEE MMM d HH:mm:ss zz uuuu",
                                                    Locale.ENGLISH
                                                )
                                            );
    System.out.println(converted);
}

qui produira

Fri Oct 15 09:27:37 Z 2010

Pour un OffsetDateTime vous devrez ajuster un peu le modèle :

public static void main(String[] args) {
    String dtStart = "2010-10-15T09:27:37Z";
    String converted = OffsetDateTime.parse(dtStart)
                                    .format(DateTimeFormatter.ofPattern(
                                                    "EEE MMM d HH:mm:ss xxx uuuu",
                                                    Locale.ENGLISH
                                                )
                                            );
    System.out.println(converted);
}

Cela produira un résultat (légèrement) différent :

Fri Oct 15 09:27:37 +00:00 2010

C'est parce qu'un ZonedDateTime prend en compte les fuseaux horaires nommés dont les décalages changent (en raison de l'heure d'été ou d'autres facteurs similaires), tandis qu'une OffsetDateTime juste connaît un décalage par rapport à l'UTC.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X