[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.