it-swarm.com.de

Python -Entfernungszeit von Datetime-Zeichenfolge

Ich habe eine Datumszeichenfolge und möchte sie in die Datumsart konvertieren:

Ich habe versucht, datetime.datetime.strptime mit dem gewünschten Format zu verwenden, es wird jedoch die Uhrzeit bei der Konvertierung zurückgegeben.

    when = alldates[int(daypos[0])]
    print when, type(when)

    then = datetime.datetime.strptime(when, '%Y-%m-%d')
    print then, type(then)

Das gibt die Ausgabe zurück:

   2013-05-07 <type 'str'>
   2013-05-07 00:00:00 <type 'datetime.datetime'>

Ich muss die Uhrzeit entfernen: 00:00:00.

25
pythonhunter
print then.date()

Was Sie wollen, ist ein datetime.date-Objekt. Sie haben ein datetime.datetime-Objekt. Sie können das Objekt beim Drucken wie oben beschrieben ändern oder beim Erstellen des Objekts folgende Schritte ausführen:

then = datetime.datetime.strptime(when, '%Y-%m-%d').date()
46
Woody Pride
>>> print then.date(), type(then.date())
2013-05-07 <type 'datetime.date'>

Um eine Zeichenfolge in ein Datum umzuwandeln, ist AFAIK am einfachsten mit dem dateutil-Modul:

import dateutil.parser
datetime_object = dateutil.parser.parse("2013-05-07")

Es kann auch mit Zeitzonen umgehen:

print(dateutil.parser.parse("2013-05-07"))
>>> datetime.datetime(2013, 5, 7, 1, 12, 12, tzinfo=tzutc())

Wenn Sie ein Datumsobjekt haben, sagen Sie:

import pytz
import datetime
now = datetime.datetime.now(pytz.UTC)

und Sie möchten den Zeitabschnitt abhacken, dann ist es meiner Meinung nach einfacher, ein neues Objekt zu erstellen, anstatt den Zeitabschnitt zu "subtrahieren". Es ist kürzer und kugelsicherer:

date_part datetime.datetime(now.year, now.month, now.day, tzinfo=now.tzinfo)

Es speichert auch die Zeitzoneninformationen, es ist einfacher zu lesen und zu verstehen als eine zeitliche Delta-Substraktion, und Sie haben auch die Möglichkeit, eine andere Zeitzone in demselben Schritt anzugeben (was sinnvoll ist, da Sie ohnehin keinen Zeitteil haben). .

1
nagylzs

Für mich musste ich ein Zeitobjekt behalten, da ich UTC verwendete und es ein bisschen schmerzhaft ist. Das ist es, was ich am Ende getan habe:

date = datetime.datetime.utcnow()

start_of_day = date - datetime.timedelta(
    hours=date.hour, 
    minutes=date.minute, 
    seconds=date.second, 
    microseconds=date.microsecond
)

end_of_day = start_of_day + datetime.timedelta(
    hours=23, 
    minutes=59, 
    seconds=59
)

Beispielausgabe:

>>> date
datetime.datetime(2016, 10, 14, 17, 21, 5, 511600)
>>> start_of_day
datetime.datetime(2016, 10, 14, 0, 0)
>>> end_of_day
datetime.datetime(2016, 10, 14, 23, 59, 59)
0
Dovy

datetime-Objekte haben eine replace()-Methode. Dadurch bleibt die Zeitzone erhalten, so dass Sie dies tun können

>>> from Django.utils import timezone
>>> now = timezone.now()
>>> now
datetime.datetime(2018, 8, 30, 14, 15, 43, 726252, tzinfo=<UTC>)
>>> now.replace(hour=0, minute=0, second=0, microsecond=0)
datetime.datetime(2018, 8, 30, 0, 0, tzinfo=<UTC>)
0
ukrutt