[Python-de] Unix-Zeit
Gerhard Häring
gh at ghaering.de
Die Dez 2 17:44:26 CET 2003
Olaf 'ruebezahl' Radicke wrote:
> Hi!
>
> Ich habe festgestellt das bei Python die Unix-Zeit bei etwa +2 100 000 000
> Sekunden aufhört. Ist das "Konvention" oder nur eine Python-Beschränkung?
Hab kein Bock das jetzt genau nachzulesen, wenn jemand in POSIX usw. fitter ist
wird man mich schon berichtigen, wenn ich Blödsinn erzähle:
Die Unix-Zeitfunktionen verwenden als Einheit time_t, das im Normalfall ein int
ist, der im Normalfall 32 Bit lang ist (auf manchen Maschinen 64 Bit). Du hast
wohl eine 32-Bit Maschine vor dir ;-)
> Weil wen bei Unix nach +2 100 000 000 Sekunden "alles zu Ende ist", würde bei
> meiner PostgreSQL-DB in Integer-Typ reichen (+2 Mrd.)
Erhm. Was du willst, ist höchstwahrscheinlich der Typ TIMESTAMP. Es besteht
keinerlei Notwendigkeit, bei PostgreSQL oder bei Python da selber was
rumzupfiemeln. Dafür gibt's bei PostgreSQL die enstprechenden Datentypen und
Zeitfunktionen und bei Python mxDateTime aus den mxExtensions [1].
Hier mal ein Beispiel aus einer interaktiven Session, was alles geht:
>>> from pyPgSQL import PgSQL
>>> from mx.DateTime import *
>>> cx = PgSQL.connect()
>>> cu = cx.cursor()
>>> cu.execute("create table test(t1 timestamp, t2 timestamp)")
>>> t1 = now()
>>> t2 = t1 + oneWeek
>>> t1, t2
(<DateTime object for '2003-12-02 17:35:23.32' at 81bba50>, <DateTime object for
'2003-12-09 17:35:23.32' at 818b150>)
>>> t2 - t1
<DateTimeDelta object for '7:00:00:00.00' at 81d50e0>
>>> cu.execute("insert into test(t1, t2) values (%s, %s)", (t1, t2))
>>> cu.execute("select t1, t2 from test")
>>> print cu.fetchone()
[<DateTime object for '2003-12-02 17:35:23.32' at 81e0be8>, <DateTime object for
'2003-12-09 17:35:23.32' at 81e3070>]
>>> cu.execute("select t2 - t1 from test")
>>> print cu.fetchone()
[<DateTimeDelta object for '7:00:00:00.00' at 81ee9e8>]
>>> cx.close()
>>>
-- Gerhard
[1] Ab 2.3 gibt's auch das eingebaute datetime-Modul, aber a) funktioniert mein
PostgreSQL-Adapter pyPgSQL damit (noch) nicht und b) fehlen dem builtin-Modul noch
die ganzen Methoden zum Parsen von Datums-/Zeitstrings.