2016-03-26 3 views
1

Wie kann ich das date_label zeigen, um das Datum in diesem Format "JJJJ-MM-TT" anstelle von Millisekunden anzuzeigen? Bevor ich das Datum als String gespeichert habe und es funktioniert gut, aber dann habe ich zu lange geändert, weil das ist die Art, Daten zu speichern, nach Meinung vieler "Experten" auf dieser Website. Ich kann keine Funktion in SQLite finden, die die Konvertierung durchführt, und ich habe versucht, DBAdapter.KEY_DATE in der String-Liste mit DateFormat ohne Erfolg zu formatieren.Das Datum wie "yyyy-MM-dd" in Android SQLite

private void fillData() { 

    cursor = db.getAllWorkdays(); 

    String[] from = new String[] { DBAdapter.KEY_WEEKDAY, DBAdapter.KEY_DATE , DBAdapter.KEY_WORKSTART , 
      DBAdapter.KEY_WORKEND , DBAdapter.KEY_VAKT }; 
    int[] to = new int[] { R.id.textView_weekday, R.id.date_label, R.id.start_label, R.id.end_label, R.id.textView4 }; 

    // create an array adapter and set it to display using our row 

    SimpleCursorAdapter rows = new SimpleCursorAdapter(this, 
      R.layout.list_row, cursor, from, to, 0); 
    setListAdapter(rows); 
} 

This picture shows a running example

+0

'ich zu lange geändert, weil das die Art und Weise ist Daten zu speichern, entsprechend viele„Experten“auf diesem site.' Sind Sie ernst? Ich finde mich mit TimeStrings sehr komfotabel. Sie können das Ganzzahlformat verwenden, wenn ** Sie ** bevorzugen, aber es gibt keine Gegenanzeige bei der Verwendung von TimeStrings. Was ich mehr * menschlich lesbar finde *. –

Antwort

-1
  • Erstens: Daten speichern immer so lange.

  • Zweitens: Die Abfrage lange dann aus Ihrer Datenbank und zu tun: Date date = new Date(longValue);

  • Last but not least:

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); sdf.format(date);

0

Sie wollen das Datum als lange speichern, -- das ist gut. SimpleCursorAdapter ist in diesem Fall jedoch zu einfach. Sie werden besser einen benutzerdefinierten CursorAdapter für Ihre ListView erstellen und dessen getView() -Befüllung vornehmen und die verschiedenen TextView-Ansichten innerhalb der root-inflated-Ansicht auffüllen.

Wenn es Zeit, um die Textview zu füllen, die das Datum enthält, verwenden formatDateTime() wie folgt aus:

long time = ... // whatever your time is from the cursor 
String date_as_string = DateUtils.formatDateTime(context, time, FORMAT_SHOW_DATE | FORMAT_NUMERIC_DATE); 

Die Zeichenfolge wird für den Benutzer gewählten Gebietsschema geeignet sein (sie Daten als YYYY-dd-MM bevorzugen könnte , also lass sie wählen).

+0

Nun, der benutzerdefinierte CursorAdapter hat funktioniert, danke. Ebenso funktionierte das Datum (DateColumn/1000, 'unixepoch') als @CL. empfohlen. Sollte auf der SQLite-Seite ein wenig weiter gescrollt haben. Aber ich kann wirklich nicht verstehen, warum ich lange als Date Speicher verwenden sollte, wenn String so viel einfacher ist. Die Anzahl der Zeilen nicht mehr als 50, also gibt es nicht viele Daten. –

+0

@ ClasÖstman Es braucht mehr Platz, du verlierst die Präzision, und du musst es jedes Mal parsen, wenn du etwas mit diesem Datum machen willst, das nicht nur die Zeichenkette anzeigt. Dein Anruf aber. –

0

Dies wird in SQLite direkt unterstützt.

Verwenden Sie einfach date(timestring, modifier, ...) in Ihrer Abfrage.

Für Daten, die als UNIX-Datum gespeichert sind, sollten Sie den Modifikator unixepoch verwenden.

+0

Leider verwendet die date() -Funktion eine Timestring oder eine julianische Datumsnummer als Argument. Mein Datum wird als UNIX-Datum in Millisekunden seit 1970-01-01 gespeichert. Siehe [link] (https://www.sqlite.org/lang_datefunc.html) und [link] (https://en.wikipedia.org/wiki/Julian_day#Calculation) –

0

SQLite der built-in date functions Unterstützung Unix-Zeitstempel (in Sekunden) in Verbindung:

SELECT date(DateColumn/1000, 'unixepoch') FROM ...