2016-07-16 14 views
0

Meine App verwendet SQLite-Zeitstempel, die UTC sind. Das war lange Zeit in Ordnung.Ich brauche die Zeitzone eines Zeitstempels in SQLite

Aber jetzt muss ich die Zeitzone wissen, in der ein bestimmter Datensatz erstellt wurde.

Ich bin glücklich, UTC weiter zu speichern, aber ich muss Daten für den Benutzer anzeigen, der die Ursprungszone verwendet.

Dies könnte leicht erreicht werden, wenn SQLite einen Zeitstempel mit Zeitzone (+/- HHMM) unterstützt. Es könnte auch leicht erreicht werden, wenn SQLite die aktuelle Zeitzone im '+/- HHMM'-Format extrahieren könnte.

Gibt es eine Möglichkeit, die 'aktuelle' Zeitzone von SQLite zu bekommen? Oder um einen Zeitstempel mit der Zeitzone zu erhalten?

Um klar zu sein I wie und wollen UTC. Es ist gut, aber ich brauche auch die ursprüngliche TZ. Ich bin froh, wenn dies in einem anderen Feld gespeichert werden kann. Auch glücklich zu speichern zwei Datumsfelder, wenn nötig.

Edit1: Das Beste, was ich mit oben kommen kann ist:

select round(24*60*60*(julianday('now','localtime')-julianday('now'))); 

, die in Sekunden ein Offset produziert, ist aber umständlich und Nicht-Standard. Ich würde gerne einen 'current_timestamp mit Zeitzone' analog sehen.

Edit2: An diesem Punkt bin ich nicht sicher, warum ich den Julian eher Offset-Speicher plagen würde als nur ein zweites Datumsfeld Ortszeit darstellt. Ich denke, es spart ein paar Bytes, aber das ist es auch schon.

+0

Es ist notwendig, es getrennt zu speichern, es gibt wirklich keine Möglichkeit, anders damit umzugehen. –

+0

Ich bin glücklich, getrennt zu speichern, aber gibt es einen besseren Weg, es im Format +/- HHMM zu bekommen? – RabidMutant

+0

Verstehen Sie, dass eine Zeitzone nicht mit einer Zeitzonenverschiebung übereinstimmt. Mehr dazu in [the timezone tag wiki] (http://stackoverflow.com/tags/timezone/info). Insbesondere ist der * aktuelle * Offset möglicherweise nicht der korrekte Offset für den Zeitstempel, mit dem Sie arbeiten. Auch die "timestamp with time zone" -Typen anderer Datenbanken (mysql, postgres usw.) behalten den Offset (trotz des Namens) normalerweise nicht bei. "datetimeoffset" in SQL Server tut dies jedoch. –

Antwort

0

Der Ansatz, den Sie in Ihrer Antwort gezeigt haben, ist vernünftig, wenn Sie now durch den aktuellen Zeitstempel ersetzen. Mit anderen Worten, gehen Sie nicht davon aus, dass der aktuelle Offset der korrekte Offset für alle Zeitstempel ist.

Beachten Sie jedoch, dass dies nur den Zeitzonen-Offset für die aktuelle Maschine angibt. Da SQLite oft mit einer Anwendung läuft, ist das wahrscheinlich in Ordnung. Aber wenn Ihre Daten aus irgendeinem Grund anderswo entstehen, können Sie sich nicht daran erinnern, aus welcher Zeitzone die Daten stammen.

+0

Warum sollte ich jetzt ersetzen, wenn ich die aktuelle Zeit in einem Trigger oder Standard haben möchte?Auch die Frage lautete: Gibt es einen BESSEREN Weg? – RabidMutant