1004 Stimmen

Datum in datetime in Python umwandeln

Gibt es eine integrierte Methode zur Konvertierung einer date zu einer datetime in Python, zum Beispiel das Abrufen der datetime für die Mitternacht des angegebenen Datums? Die umgekehrte Umrechnung ist einfach: datetime hat eine .date() Methode.

Muß ich wirklich manuell die datetime(d.year, d.month, d.day) ?

218 Stimmen

Keine dumme Frage; Datumsobjekte sollten eine .datetime() Methode; dumm ist nur, dass sie eine solche Methode nicht haben.

25 Stimmen

@Zags: oder datetime.from_date() Konstrukteur.

15 Stimmen

Nein, es sollte nicht ein Datum ist eine Teilmenge von datetime (es ist sogar im Namen). Es ist eindeutig, was das Datum von einer datetime ist. Aber andersherum ist ein Datum ein Block von 24 Stunden (normalerweise), also kann es viele Datumszeiten haben. Welche Datumszeit würde aus einem Datum entstehen? Man kann nicht immer 00:00 nehmen, denn was ist, wenn es diese Zeit nicht gibt, z. B. weil die Sommerzeit sie übersprungen hat? Nicht so einfach#

10voto

kadee Punkte 6742

Heute, im Jahr 2016, denke ich, dass die sauberste Lösung von Pandas Timestamp bereitgestellt wird:

from datetime import date
import pandas as pd
d = date.today()
pd.Timestamp(d)

Timestamp ist das Pandas-Äquivalent zu datetime und ist in den meisten Fällen mit diesem austauschbar. Prüfen:

from datetime import datetime
isinstance(pd.Timestamp(d), datetime)

Aber wenn Sie wirklich ein einfaches Datum wollen, können Sie das immer noch tun:

pd.Timestamp(d).to_datetime()

Zeitstempel sind sehr viel leistungsfähiger als Datumsangaben, unter anderem im Umgang mit Zeitzonen. Eigentlich sind Zeitstempel so mächtig, dass es schade ist, dass sie so schlecht dokumentiert sind...

0 Stimmen

Gute Entscheidung. Kam hier, wie ich dachte, es würde eine Python Datetime Lösung für ein Pandas DatetimeIndex Problem benötigen. Schade, Pandas hat nicht das Konzept eines DateIndex.

45 Stimmen

Warum brauchen wir ein schwergewichtiges Paket, nur um datetime manipulieren zu können, selbst im Jahr 2016?!

7 Stimmen

Pandas zu diesem Zweck herauszuholen ist, als würde man eine Ameise mit dem Hammer bearbeiten

6voto

kadee Punkte 6742

Eine Möglichkeit, von Datum in datetime zu konvertieren, wurde noch nicht erwähnt:

from datetime import date, datetime
d = date.today()
datetime.strptime(d.strftime('%Y%m%d'), '%Y%m%d')

3 Stimmen

Stimmt, aber die Konvertierung von Ints in Strings und zurück ist wahrscheinlich etwas teurer als die direkte Arbeit mit Ints, daher würde ich diese Methode nur für die Verarbeitung kleiner Mengen verwenden

3voto

Raphael Amoedo Punkte 3735

Sie können verwenden einfach_datieren um es einfach zu machen:

import date_converter
my_datetime = date_converter.date_to_datetime(my_date)

3voto

Sławomir Lenart Punkte 6134

Muss ich datetime(d.year, d.month, d.day) wirklich manuell aufrufen?

Nein, Sie möchten lieber anrufen

date_to_datetime(dt)

die Sie einmalig in einigen utils/time.py in Ihrem Projekt:

from typing import Optional
from datetime import date, datetime

def date_to_datetime(
    dt: date,
    hour: Optional[int] = 0,
    minute: Optional[int] = 0, 
    second: Optional[int] = 0) -> datetime:

    return datetime(dt.year, dt.month, dt.day, hour, minute, second)

0 Stimmen

Wahrscheinlich ist es eine gute Idee, die tz hinzuzufügen.

0 Stimmen

Besser, da dies schneller ist als die Umwandlung in einen String und zurück

0voto

Kris Lukacs Punkte 1

Sie können diese Klasse verwenden:

import time 

import datetime

class TimingClass():

    def __init__(self):

        self.YEAR        = datetime.date.today().year
        self.MONTH       = datetime.date.today().month
        self.DATE        = datetime.date.today().day
        self.HOUR        = datetime.datetime.now().hour
        self.MINUTE      = datetime.datetime.now().minute
        self.SECONDS     = datetime.datetime.now().second

        self.TODAY       = datetime.date.today()
        self.YESTERDAY   = datetime.datetime.strftime( (self.TODAY - datetime.timedelta(days = 1)) , '%Y-%m-%d')
        self.TOMORROW   = datetime.datetime.strftime( (self.TODAY + datetime.timedelta(days = 1)) , '%Y-%m-%d')

        self.TODAY_datetime = datetime.datetime.combine(datetime.date.today(), datetime.datetime.min.time())

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X