1

Ich habe eine SQLite-Datenbank in Android, wo das Datum eines bestimmten Ereignisses als String gespeichert wird. Ich habe die Date von einem DatePickerDialog.SimpleDateFormat Zeichenfolge an Wochentag

Meine Termine werden in einer ListView angezeigt und dafür möchte ich sie nach Datum bestellen und bekomme den Wochentag von jedem String.

Ich weiß, ich muss meine String in SimpleDateFormat umwandeln und dann den Tag bekommen und Event vergleichbar machen. Aber alles, was ich bekomme, ist ein ParseException.

Das ist die String ich in meine Datenbank einfügen:

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

Das ist, was ich von Stack-Überlauf bekam durch das Lesen anderer Fragen:

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

Und das ist, wie ich versuche, den neuen zu bekommen String dayOfWeek in mein ListView:

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

Aber ich diesen Fehler immer erhalten in Android Monitor:

java.lang.IllegalArgumentException:

Also nicht gegeben Objekt als Datumsformat kann, ich nehme an, ich etwas falsch in meiner Datenbank gemacht haben.

Als mein Datum zeigen String es zeigt, wie folgt aus: 28-10-2017

Ich weiß nicht, warum dies nicht formatierbare ist.

+1

Interessiert zu sehen, was 'String eventDate = this .getDate(); 'Dies gibt zurück. Ich meine, welches Format speichern Sie in der Datenbank? Sie haben in Ihrer Dialogauswahl "28.10.2017" und "28-10-2017" erwähnt. Welches ist es? Debuggen und herausfinden. – Vucko

+0

Die Nachricht * "Kann ein gegebenes Objekt nicht als Datum formatieren" * passiert normalerweise, weil die 'SimpleDateFormat # format' Methode einen' java.util.Date' als Parameter benötigt und Sie wahrscheinlich einen anderen Typ übergeben. In 'dateFormat.format (Datum)', wo ist diese 'Datum'-Variable definiert? Sie sollten stattdessen "myDate" übergeben. –

+0

Oh yeah Ich habe einen Tippfehler in der Frage gemacht. Natürlich gibt es das Datum wie folgt zurück: 28-10-2017 – stoesselleon

Antwort

2

Sie müssen Ihren Code ändern:

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

Verwenden Sie die folgenden Methoden: das Format Standard halten und für alle gleich

/** 
    * 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

Als Ihr Datum 2017.10.28 ist so in diesem Muster Sie müssen Ihr Datumsformat wie folgt ändern: -

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

Sorry, das ist natürlich richtig, aber du hast gerade einen Tippfehler in meiner Frage entdeckt! – stoesselleon

Verwandte Themen