DATETIME Problem

  • Antworten:12
  • Bentwortet
ECR
  • Forum-Beiträge: 72

25.07.2012, 11:38:07 via Website

Hallo,
Ich versuche gerade eine sqlite DB zu erstellen. Ich arbeite im Moment mit der adb Shell damit ich eben schnell solche Sachen auf der sqlite DB ausprobieren kann.
Mein Problem ist nun das ich einen String habe der so aussieht "08 05 2012 9:15PM" Nun würde ich das nun gerne in ein DATETIME Feld einfügen und zwar so das das Programm dies auch als Datum erkennt. Ich weiss ich muss zum einfügen das Format ' YYYY-MM-DD HH:MM:SS' hinbekommen. Ich weiss noch nicht wie ich das machen soll, aber das sehe ich mir später an,irgednwie muss ich es ja parsen.
Aber mein eigentliches Problem ist das ich nun ein DATETIME Feld habe, aber ich kann einfach alles darin einfügen:
Also:
1insert into test (start) values ('2012 04 03 12:22:16');
ist gültig
Auch
1insert into test (start) values ('kdsjf');
ist gültig!

Also alles was zwischen ' ' steht wird einfach eingetragen!! Das ist doch falsch? Ich meine ich will ja das das Programm dann diese Werte als Datum Werte benutzt und nicht einfach als ein String?

Hat da jemand eine Antwort?

Antworten
ECR
  • Forum-Beiträge: 72

25.07.2012, 13:01:53 via Website

Ok du willst mir also sagen das Sqlite keine Datum sachen besitzt??

SQLite does not have a storage class set aside for storing dates and/or times. Instead, the built-in Date And Time Functions of SQLite are capable of storing dates and times as TEXT, REAL, or INTEGER values

Und was ist genau mit diesem built-in gemeint?

Applications can chose to store dates and times in any of these formats and freely convert between formats using the built-in date and time functions.

Heisst das also das ich wenn ich an unserer App welche auch Datum für Stundenpläne nützt ich das mit normalen Strings lösen muss?

Antworten
Carsten M.
  • Forum-Beiträge: 33.204

25.07.2012, 13:13:03 via Website

Speichere doch einfach die Zeit als Ticks in ein Datenbankfeld.

Und beim Auslesen wandelst Du die Ticks in das gewünschte Format um...

Herzliche Grüße

Carsten

Ich komm' mir langsam vor wie jemand, der ich bin // #cäthe

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

25.07.2012, 13:14:20 via Website

Eliseo R.
Heisst das also das ich wenn ich an unserer App welche auch Datum für Stundenpläne nützt ich das mit normalen Strings lösen muss?
Ich würde einen INTEGER nehmen und Date.getTime() speichern, also den long-Wert deines Timestamp.
Spart das String-rumgeparse.

Antworten
ECR
  • Forum-Beiträge: 72

25.07.2012, 13:22:38 via Website

So habe nun mal das rausgefunden das funzt, so kann ich wenigstens mal ne Funktion davon nutzten :-)

1insert into test (ende) values(datetime('now'));

Ich habe noch nie von Ticks ghört? Was ist das und in welchem Datenbankfeld meinst du? Das in der Sqlite?
Date.getTime() wäre doch nur wenn ich die aktuelle Zeit möchte? Oder welchen Timestamp meinst du?Aber ich habe ja vordefinierte Zeiten.
Es ist so das ich den Stundeplan als eine MySql Tabelle auf einem Server im Web habe, über JSON wollen wir das dann in eine Sqlite Db auf das Andorid Telefon runterladen. Darum dachte ich das es einfacher wäre eben so ein DATE oder DATETIME Feld zu erstellen in der Sqlite DB aber eben, das gibt es ja so gar nicht...

Antworten
Markus B.
  • Forum-Beiträge: 636

25.07.2012, 13:24:29 via Website

Eliseo R.
Ok du willst mir also sagen das Sqlite keine Datum sachen besitzt??

Hi,
also ich will dir gar nichts sagen, ich wollte Dir eine Hilfestellung geben. Du hast dir eben die Doku von sqliteV3 angeschaut und diese wurden von den Entwicklern geschrieben. Also sagen dir die Entwickler von sqliteV3 wie du es machen sollst !
Ich kann hier meinen Vorredner nur zustimmen und sage auch:
Nutz einfach Iinteger und wandel es entsprechend zu Anzeige in ein Format deiner Wahl um. Dann kannst du mit den Datumsangaben auch beruhig rechnen.

Gruß,
Markus

— geändert am 25.07.2012, 13:25:25

Antworten
ECR
  • Forum-Beiträge: 72

25.07.2012, 13:35:11 via Website

Wie schnell sich die Leute in Foren immer auf den Schlips getreten fühlen ;-)Ich bin sehr dankbar für deine Hilfestellung! Vielleicht habe ich mich schlecht formuliert. Ich wundere mich einfach das etwas so wichtiges wie Datum und Zeit keine eigene Datentypen besitzen in sqlite.

Ok dann wenn ich euch richtig verstehe erstelle ich einfach in sqlite ein Integer Feld und füge dort das Datum in dem Format ein wie ich es will. Idealerweise gerade in YYYY-MM-DD weil das am meisten so verwendet wird. Dann sollte das auch funktionieren wenn ich mit verschiedenen Daten(Mehrzahl von Datum ;-)) rechnen will?

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

25.07.2012, 13:47:31 via Website

Eliseo R.
Ok dann wenn ich euch richtig verstehe erstelle ich einfach in sqlite ein Integer Feld und füge dort das Datum in dem Format ein wie ich es will. Idealerweise gerade in YYYY-MM-DD weil das am meisten so verwendet wird.
Nee eben nicht wie du es willst, sondern als long-timestamp, also als Anzahl Millisekunden seit 01.01.1970, dem Beginn der digitalen Zeitrechnung.
Einen solchen Timestamp kannst Du z.B. mit SimpleDateFormat in beliebige Ausgabeformate übersetzen.

http://www.vogella.com/articles/JavaDateTimeAPI/article.html

— geändert am 25.07.2012, 13:48:29

Antworten
ECR
  • Forum-Beiträge: 72

25.07.2012, 13:59:41 via Website

Ach so :-) Mhm ja die Idee hört sich wirklich Interessant an! :-) Ich werde das mal probieren! Danke für die Hilfe bis hierhin...

Antworten
ECR
  • Forum-Beiträge: 72

25.07.2012, 18:13:11 via Website

Da es aber in Sqllite kein long gibt, nehme ich einfach an ich verwende den Datentyp INTEGER,oder?

Antworten
Markus B.
  • Forum-Beiträge: 636

25.07.2012, 19:40:31 via App

Hi, du nimmst als column den Typ INTEGER. Der Typ kann dann von 1-byte char bis zu 8-byte long long speichern. Somit sorgt die sqlite engine für das effiziente speichern der Daten.

Gruß,
Markus

Antworten
ECR
  • Forum-Beiträge: 72

27.07.2012, 12:01:06 via Website

Hey super Danke!

Man aber das mit der ganzen sqlite ist nicht ganz einfach:blink: wenn man praktisch noch keine Ahnung von Android hat...Naja mal schauen wie weit ich komme...

Antworten