1

J'ai une base de données SQLite dans Android où la date d'un événement spécifique est enregistrée comme String. J'ai obtenu le Date par un DatePickerDialog.SimpleDateFormat Chaîne au jour de la semaine

Mes événements sont affichés dans un ListView et pour cela, je veux les commander par date et obtenir le jour de la semaine de String.

Je sais que je dois convertir mon String en SimpleDateFormat puis obtenir le jour et rendre l'événement comparable. Mais tout ce que je reçois est un ParseException.

C'est String insérer dans ma base de données:

private void handleDateDialog() { 
    setDate.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Calendar cal = Calendar.getInstance(); 
      int year = cal.get(Calendar.YEAR); 
      int month = cal.get(Calendar.MONTH); 
      int day = cal.get(Calendar.DAY_OF_MONTH); 

      DatePickerDialog dialog = new DatePickerDialog(CreateEvent.this,android.R.style.Theme_Holo_Light_Dialog_MinWidth,dateSetListener,year,month,day); 

      dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
      dialog.show(); 
     } 
    }); 

    dateSetListener = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker datePicker, int year, int month, int day) { 
      month += 1; 
      String input = day + "-" + month + "-" + year; 
      dateSelected.setText(input); 
     } 
    }; 
} 

C'est ce que je suis de débordement de pile en lisant d'autres questions:

public String getDayOfWeek(){ 
    String eventDate = this.getDate(); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
    try { 
     Date myDate = dateFormat.parse(eventDate); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    dateFormat.applyPattern("EE"); 
    String dayofweek = dateFormat.format(date); 
    return dayofweek; 
} 

Et voilà comment j'essaie d'obtenir le nouveau String dayOfWeek dans mon ListView:

try { 
    holder.day_of_week.setText(individualEvent.getDayOfWeek()); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

Mais je reçois toujours cette erreur dans Android Moniteur:

java.lang.IllegalArgumentException: Impossible de formater l'objet donné comme date

Donc, je suppose que je l'ai fait quelque chose de mal dans ma base de données.

Quand montrer ma date String il montre comme ceci: 28-10-2017

Je ne sais pas pourquoi ce n'est pas formaté.

+1

Intéressé pour voir ce que 'String eventDate = this .getDate(); 'ceci retourne. Je veux dire quel est le format que vous enregistrez dans la base de données? Vous avez mentionné "28.10.2017" et "28-10-2017" dans votre sélecteur de dialogue. Lequel est-ce? Déboguer et découvrir. – Vucko

+0

Le message * "Impossible de formater un objet donné en tant que date" * se produit généralement parce que la méthode 'SimpleDateFormat # format' nécessite un paramètre' java.util.Date' et que vous lui transmettez probablement un autre type. Dans 'dateFormat.format (date)', où cette variable 'date' est-elle définie? Vous devriez passer 'myDate' à la place. –

+0

Oh ouais j'ai fait une faute de frappe dans la question. Bien sûr, il retourne la date comme ceci: 28-10-2017 – stoesselleon

Répondre

2

Vous devez changer votre code comme:

public String getDayOfWeek(){ 
    String eventDate = this.getDate(); 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); 
    try { 
     Date myDate = dateFormat.parse(eventDate); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    dateFormat.applyPattern("EE"); 
    String dayofweek = dateFormat.parse(myDate); 
    return dayofweek; 
} 
-1

utilisation ci-dessous les méthodes: Conserver le format standard et même pour tous

/** 
    * Parses @date to String in provided @format 
    * 
    * @param date Date 
    * @param format Convert to Format 
    * @return formatted date string 
    */ 
    public static String DateToString(Date date, String format) { 
     if (date != null) { 
      try { 
       DateFormat dateFormat = new SimpleDateFormat(format); 
       return dateFormat.format(date); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return ""; 
      } 
     } else { 
      return ""; 
     } 
    } 
/** 
    * Parses String to date in provided {@link Format } as String 
    * 
    * @param date String date 
    * @param format Format 
    * @return Date 
    */ 
    public static Date StringToDate(String date, String format) { 
     if (date != null && !date.isEmpty() && date.length() > 0) { 
      try { 
       DateFormat dateFormat = new SimpleDateFormat(format); 
       return dateFormat.parse(date); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return null; 
      } 
     } else { 
      return null; 
     } 
    } 

    /** 
    * Parses date String to date String in provided {@link Format } fromFormat to toFormat as String 
    * 
    * @param date  String date 
    * @param fromFormat fromFormat 
    * @param toFormat toFormat 
    * @return Format String date 
    */ 
    public static String StringToString(String date, String fromFormat, String toFormat) { 
     if (date != null && !date.isEmpty()) { 
      try { 
       SimpleDateFormat formatter = new SimpleDateFormat(fromFormat); 
       Date tempDate = formatter.parse(date); 
       DateFormat dateFormat = new SimpleDateFormat(toFormat); 
       return dateFormat.format(tempDate); 
      } catch (Exception e) { 
       e.printStackTrace(); 
       return ""; 
      } 
     } else { 
      return ""; 
     } 
    } 
1

Comme votre date est 28/10/2017 dans ce modèle afin Vous devez modifier votre format de date comme suit: -

SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); 
+1

Désolé, c'est bien sûr juste mais vous venez de découvrir une faute de frappe dans ma question! – stoesselleon