Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

zu datum einen tag addieren

712 views
Skip to first unread message

arneb...@gmx.de

unread,
Oct 5, 2005, 8:23:21 AM10/5/05
to
Hallo Leute,

der User gibt in einem Formular ein Datum TT.MM.JJJJ ein. Ich möchte
jetzt zu diesem Datum einen Tag dazu rechnen bzw. abziehen. Also aus
dem 28.03.2005 soll der 29.03.2005 werden. Gibt es da eine Funktion mit
der sich sowas gelegant lösen lässt? Oder muss ich mir da selber was
zusammenschreiben? Es geht leider nicht so einfach wie ich mir das
dachte. Man muss nämmlich Monatswechsel, Schaltjahre und Jahreswechsel
beachten.

Gruß Arne

Matthias Huening

unread,
Oct 5, 2005, 8:35:52 AM10/5/05
to
arneb...@gmx.de (05.10.2005 14:23):

Das geht z.B. mit dem Modul 'datetime'.

>>> import datetime as d
>>> print d.date.today()
2005-10-05
>>> print d.date.today() + d.timedelta(1)
2005-10-06


Schöne Grüße, Matthias

arneb...@gmx.de

unread,
Oct 5, 2005, 9:21:30 AM10/5/05
to
Hi,

na das sieht doch ganz gut aus. Nur wie wandele ich mein Datum so um
damit ich keinen Fehler bekomme?

61 tag_plus1 = datum[2]+"-"+datum[1]+"-"+datum[0]
62 tag_plus1 = tag_plus1 + datetime.timedelta(1)

TypeError: cannot concatenate 'str' and 'datetime.timedelta' objects
args = ("cannot concatenate 'str' and 'datetime.timedelta'
objects",)

gruß arne

Diez B. Roggisch

unread,
Oct 5, 2005, 10:11:23 AM10/5/05
to


RTFM. datetime.datetime.strftime()

MfG Diez

Ralf Muschall

unread,
Oct 5, 2005, 12:13:45 PM10/5/05
to
Matthias Huening wrote:
> arneb...@gmx.de (05.10.2005 14:23):
...

>> der User gibt in einem Formular ein Datum TT.MM.JJJJ ein. Ich möchte
>> jetzt zu diesem Datum einen Tag dazu rechnen bzw. abziehen. Also aus
...

> Das geht z.B. mit dem Modul 'datetime'.

oder ohne, nur mit Bordmitteln (ich weiß allerdings nicht, was zu
Silvester mit Schaltsekunden passiert):

import time

nextday=lambda s:time.strftime('%d.%m.%Y',time.localtime(86400+time.mktime(time.strptime(s,'%d.%m.%Y'))))

Ralf

Matthias Huening

unread,
Oct 5, 2005, 4:53:52 PM10/5/05
to
Ralf Muschall (05.10.2005 18:13):

>>Das geht z.B. mit dem Modul 'datetime'.
>
>
> oder ohne, nur mit Bordmitteln (ich weiß allerdings nicht, was zu
> Silvester mit Schaltsekunden passiert):

'datetime' gehört seit Version 2.3 zu den Bordmitteln...

Matthias

arneb...@gmx.de

unread,
Oct 6, 2005, 3:55:54 AM10/6/05
to
Danke für eure Antworten. Ich bekomms leider nicht hin. Hab erst vor 2
Wochen angefangen Python zu lernen...vielleicht könnt ihr mir nochma
helfen. Die Doku zu datetime ist mir leider etwas zu konfus.

Also mein Datum liegt so vor:

datum = ['06','10','2005']

Wie kann ich das jetzt ändern um es auf den richtigen Datentyp zu
bekommen?

Am Ende sollte es so aussehen:

tag_plus1 = "2005-10-07"

@Ralf: was beudeuted das "s:" in "s:time.strftime" so einen Doppelpunkt
hab ich in Python noch nie gesehen?!?

Danke schonmal,
Gruß Arne

Achim Domma (SyynX Solutions GmbH)

unread,
Oct 6, 2005, 4:24:36 AM10/6/05
to arneb...@gmx.de
arneb...@gmx.de wrote:

> Also mein Datum liegt so vor:
>
> datum = ['06','10','2005']
>
> Wie kann ich das jetzt ändern um es auf den richtigen Datentyp zu
> bekommen?
>
> Am Ende sollte es so aussehen:
>
> tag_plus1 = "2005-10-07"

Kann man sicher noch schöner aufschreiben, aber auf die Schnelle:

from datetime import datetime,timedelta

datum=[int(x) for x in ['06','10','2005']]
ref_date=datetime(datum[2],datum[1],datum[0])
print ref_date.strftime("%Y-%m-%d")
ref_date_plus_1=ref_date+timedelta(days=1)
print ref_date_plus_1.strftime("%Y-%m-%d")

Gruß,
Achim

Peter Otten

unread,
Oct 6, 2005, 4:27:22 AM10/6/05
to
arneb...@gmx.de wrote:

Strings in Zahlen konvertieren:

>>> datum = ["06", "10", "2005"]
>>> num_datum = [int(s) for s in datum] # sogenannte "list comprehension"
>>> num_datum
[6, 10, 2005]

Das ist leider nicht die richtige Reihenfolge für datetime.date(). Deshalb
schreibe ich die Bestandteile in separate Variablen:

>>> tag, monat, jahr = num_datum

Damit lässt sich ein Datumsobjekt erzeugen:

>>> import datetime
>>> d = datetime.date(jahr, monat, tag)
>>> d
datetime.date(2005, 10, 6)

Einen Tag hinzuaddieren:

>>> d = d + datetime.timedelta(1)
>>> d
datetime.date(2005, 10, 7)

Für das Standard-Datumsformat genügt eine einfache String-Konvertierung:
>>> str(d)
'2005-10-07'

Andere Formate lassen sich mit strftime erzeugen:

>>> d.strftime("%x")
'10/07/05'

Oops, Python weiß nicht, dass wir in Deutschland sitzen.

>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
'de_DE.UTF-8'
>>> d.strftime("%x")
'07.10.2005'

Geht doch. Die verfügbaren Formate findest Du unter

http://docs.python.org/lib/module-time.html#l2h-1955

Peter

arneb...@gmx.de

unread,
Oct 7, 2005, 6:31:26 AM10/7/05
to
Danke, hat funktioniert und hab wieder was dazu gelernt :)

Gruß Arne

Ralf Muschall

unread,
Oct 6, 2005, 6:59:14 PM10/6/05
to
arneb...@gmx.de writes:

> datum = ['06','10','2005']

Dann entfällt strptime. Den Rest haben andere schon geschrieben.

> @Ralf: was beudeuted das "s:" in "s:time.strftime"

Der gehört zum lambda - schlage mal dessen Syntax nach.

> so einen Doppelpunkt
> hab ich in Python noch nie gesehen?!?

Das ist schlimm.

Ralf
--
GS d->? s:++>+++ a+ C++++ UL+++ UH++ P++ L++ E+++ W- N++ o-- K-
w--- !O M- V- PS+>++ PE Y+>++ PGP+ !t !5 !X !R !tv b+++ DI+++
D? G+ e++++ h+ r? y?

0 new messages