SQLite Datum und Uhrzeit-Datentyp

Ich versuche zu bauen, ein nettes, kleines Datenbank zu führen auf eine mobile Anwendung (Windows Mobile 5, wenn Sie neugierig sind).

In der SQLite-Dokumentation, das Datum und die Uhrzeit-Datentyp wird wie folgt definiert:

1.2 Datum und Uhrzeit Datentyp

SQLite nicht über eine storage-Klasse, die beiseite für die Speicherung von Daten
und/oder times. Stattdessen werden die integrierten Datums-Und Zeit-Funktionen von SQLite
sind in der Lage die Speicherung von Datumsangaben und Uhrzeiten als TEXT, REAL oder INTEGER
Werte:

  • TEXT nach ISO8601-strings ("YYYY-MM-DD HH:MM:SS.SSS").
  • REAL als Julianische tageszahlen, die Anzahl der Tage seit Mittag in Greenwich am November 24, 4714 B. C. nach der proleptische
    Gregorianischen Kalender.
  • INTEGER als Unix-Zeit die Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC.

Anwendungen wählen können, zum speichern von Datums-und Zeitangaben in diesen
Formate und frei konvertieren zwischen den Formaten mithilfe der integrierten Datums-und
Zeit-Funktionen.

So, was meiner DateTime Wert, als entweder eine REAL (float) oder INTEGER ist die gleiche Größe.

Was über die TEXT format? Es gibt 23 Zeichen oben im text YYYY-MM-DD HH:MM:SS.SSS. Ist, dass 8 Byte pro Zeichen? Wenn ja, ist das ein RIESIGE Verschwendung von Speicherplatz zum speichern in Text-format (das ist das, was ich Tue zurzeit).

Was über die REAL format? Würde ich definieren, eine Basis Datum November 24, 4714 B. C.? (Ich bin auch nicht sicher, ob Visual Studio 2008 wird mich das tun lassen. Ich habe nie versucht.) Dann Holen Sie sich die TimeSpan zwischen Basis Datum Datum und ich will, extrahieren Sie die Anzahl der Tage, und speichern Sie das?

//is this how to declare this date?
private static readonly DateTime nov24_4714bc = new DateTime(-4714, 11, 24);

public static double GetRealDate(DateTime dateTime) {
  //FYI: subtracting dates in .NET returns a time span object
  return (dateTime - nov24_4714bc).TotalDays;
}

Was über die INTEGER format? Würde ich definieren, eine Basis Datum von 1970-01-01 00:00:00 UTC (bitte sagen Sie mir, wie zu tun!), dann Holen Sie sich die TimeSpan zwischen Basis Datum und meinen input Datum, extrahieren Sie die Anzahl der Sekunden ein, und speichern Sie das?

//is this a UTC date?
private static readonly DateTime utc1970_01_01 = new DateTime(1970, 1, 1);

public static double GetIntDate(DateTime dateTime) {
  //FYI: subtracting dates in .NET returns a time span object
  return (dateTime - nov24_4714bc).TotalSeconds;
}

Hilfe mit dieser? Ich bin ein wenig verwirrt, auf ein paar Punkte.

  • pls nicht speichern Daten als text.
  • FYI: Die REAL Datumsformat Nov 24, 4714 v. Chr. wirft eine ArgumentOutOfRangeException: "das Angegebene argument lag außerhalb des Bereichs Gültiger Werte."
  • und haben Sie zu vertreten, 4714 v. Chr. ?
  • Auch scheint es, wenn ich store in der UTC-Zeit und der Benutzer das Datum ändert aus welchem Grund auch immer, wird die gespeicherte Datums-Zeit-Werte sind schrecklich verkorkst. Die Speicherung von "07/04/1776" für Amerika ist Independence day ist verschwenderisch, aber viel mehr zuverlässig - es sei denn, ich bin fehlt etwas.
  • Die SQLite doc ich oben verwiesen Staaten, auf die Sie verweisen, von 4714 v. Chr. berechnen Sie den Wert für das Datum.
InformationsquelleAutor jp2code | 2011-12-20
Schreibe einen Kommentar