Datum aus SQLite Datenbank auslesen und als NSDate erfassen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Datum aus SQLite Datenbank auslesen und als NSDate erfassen

      Hallo,

      Bei meiner Programmierung ist ein Problem aufgetreten. Ich programmiere zur Zeit eine Anwendung für Mac und möchte Daten aus einer Eingabemaske in einer sqlite Datenbank speichern um diese anschließend in einem tableview darzustellen. Alles Werte werden insoweit korrekt erfasst, abgespeichert und dargestellt bis auf das Datum. Könnt ihr mir bitte helfen, damit das Datum auch als Datum wieder ausgelesen und in einem TableView dargestellt wird. Später möchte ich noch eine Funktion einbauen wie "Zeige mir alle Einträge vom Januar 2015 an". Deshalb benötige ich in der Tabelle ein NSDate wert, damit auch später damit gearbeitet werden kann.

      Mein Code für das abspeichern ist:

      Quellcode

      1. NSDate *date = [datePicker dateValue];
      2. NSString *dateAsString;
      3. NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
      4. [dateFormat setDateStyle: NSDateFormatterShortStyle];
      5. dateAsString = [dateFormat stringFromDate: date];
      6. Dann kommt ein Insert String.

      Der Insert ist kein Problem, jedoch das Auslesen:

      Quellcode

      1. char *dt = (char *) sqlite3_column_text(sqlStatement, 6);
      2. NSString *DATE = [[NSString alloc] initWithUTF8String:dt];
      3. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      4. [dateFormatter setDateFormat:@"dd/MM/yyyy"];
      5. NSDate *dateValue = [[NSDate alloc] init];
      6. dateValue =[dateFormatter dateFromString:DATE];
      Das Datum wird in der Datenbank in einer DATETIME gespeichert. Ruft man die Datenbank extern aus, so sieht ein Datumseintrag so aus: 21.07.2015

      Wenn ich das Datum aber abfrage so kommt heraus: Dienstag, 21. Juli 15 00:00:00 GMT +00:53:28

      Leider verstehe ich meinen Fehler nicht.
      Wenn mir jemand weiterhelfen könnte, so wäre das super ! :D :D :D

      Viele Grüße,
      Robert
    • Ich habe keine Ahnung was "Ruft man die Datenbank extern aus", aber das DATETIME Format von SQL ist nichts anderes als ein String im Format

      yyyy-MM-dd hh:mm:ss

      Alles was Du da oben an Formaten stehen hast, hat mit SQL nichts zu tun und kann so nciht stimmen.

      Wenn Du das Dateopicker date in eine SQL DB speichern willst, dann must du es mit dem DateFormatter entsrepchend formatieren in

      Quellcode

      1. [NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
      2. [dateFormatter setDateFormat:@"yyyy-MM-dd"];

      und wenn du das Datum in ein NSDate wandeln willst dann eben anders herum

      Gruß

      Claus
      2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

      Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
    • Man kann schon -timeIntervalSince1970 nehmen. Integer können ja auch negativ sein. Es spricht aber nicht gegen hochauflösende Fließkommazahlen. Es kann ja auch mal um Sekundenbruchteile gehen.

      Eine andere Möglichkeit ist -timeIntervalSinceReferenceDate, Typ wie oben.

      timestamp ist soweit ich weiß ziemlich implementierungsdetailreich, so dass man schon in die Doku des SQL-DBMS schauen würde. IIRC nehme ich derzeit aber auch Strings + Formatter. Dafür gab es auch einen Grund, den ich allerdings nicht mehr weiß. :) Vielleicht schaffe ich es, nächste Woche in die Sourcen zu schauen.

      Ah, der Grund war, IIRC, dass wir timestamp genommen haben, psql das aber als String liefert.
      Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
      25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
    • macmoonshine schrieb:

      Amin Negm-Awad schrieb:

      Ah, der Grund war, IIRC, dass wir timestamp genommen haben, psql das aber als String liefert.
      Das kannst du in Postgres mit EXTRACT doch umwandeln:

      SQL-Abfrage

      1. SELECT EXTRACT(EPOCH FROM time) FROM time_table;
      Ja, mace ich auch für Berechnungen in postgre selbst. Aber wozu soll ich das machen?
      Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
      25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
    • Thallius schrieb:

      das DATETIME Format von SQL

      Thallius schrieb:

      Ich erkenne keinen Vorteil Timestamp anstatt von Datetime zu nehmen.
      Ich schon: Es gibt kein DATETIME-Format von SQL.

      postgresql.org/docs/8.2/static/datatype-datetime.html
      Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
      25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
    • Hallo,

      Vielen Dank für die Antworten !


      @Thallius: Ich habe nur einen bestimmten Teil meines Codes geschrieben. Ich denke, dass der nicht geschriebene Code insoweit richtig ist, da auch andere Einträge in die Datenank korrekt abgespeichert sowie ausgelesen werden. Ich habe lediglich Probleme mit dem Datum.
      Mit "Ruft man die Datenbank extern aus" meine ich, dass man die SQLite Datenbank über den Terminal aufrufen kann und dann das Datum korrekt (also ohne Stunden, Sekunden und Zeitzone) im Format 21.07.2015 also dd.MM.yyyy angezeigt wird. So möchte ich es auch später im TableView stehen haben.

      Ich möchte das nicht unnötig kompliziert machen. Der abgespeicherte Tag reicht völlig aus. Es geht nicht um Sekundenbruchteile.

      Viele Grüße,
      Robby99