510 Stimmen

Python-Datumszeichenfolge zum Datumsobjekt

Wie konvertiere ich einen String in ein Datumsobjekt in Python?

Der String wäre: "24052010" (entsprechend dem Format: "%d%m%Y")

Ich möchte kein datetime.datetime Objekt, sondern ein datetime.date Objekt.

8voto

Grzegorz Punkte 813

Für einen einzelnen Wert ist die Methode datetime.strptime die schnellste

import arrow
from datetime import datetime
import pandas as pd

l = ['24052010']

%timeit _ = list(map(lambda x: datetime.strptime(x, '%d%m%Y').date(), l))
6.86 µs ± 56.5 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 100000 Schleifen pro Durchlauf)

%timeit _ = list(map(lambda x: x.date(), pd.to_datetime(l, format='%d%m%Y')))
305 µs ± 6.32 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)

%timeit _ = list(map(lambda x: arrow.get(x, 'DMYYYY').date(), l))
46 µs ± 978 ns pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 10000 Schleifen pro Durchlauf)

Für eine Liste von Werten ist pd.to_datetime von pandas am schnellsten

l = ['24052010'] * 1000

%timeit _ = list(map(lambda x: datetime.strptime(x, '%d%m%Y').date(), l))
6.32 ms ± 89.6 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 100 Schleifen pro Durchlauf)

%timeit _ = list(map(lambda x: x.date(), pd.to_datetime(l, format='%d%m%Y')))
1.76 ms ± 27.3 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)

%timeit _ = list(map(lambda x: arrow.get(x, 'DMYYYY').date(), l))
44.5 ms ± 522 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 10 Schleifen pro Durchlauf)

Für das ISO8601-Datumsformat ist ciso8601 ein Rakete

import ciso8601

l = ['2010-05-24'] * 1000

%timeit _ = list(map(lambda x: ciso8601.parse_datetime(x).date(), l))
241 µs ± 3.24 µs pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, 1000 Schleifen pro Durchlauf)

5voto

Kruupös Punkte 4494

Es gibt eine weitere Bibliothek namens arrow, die wirklich großartig ist, um Manipulationen mit Python-Datum vorzunehmen.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

3voto

Manendar Punkte 9

Zeichenfolge "24052010" Auf sehr manuelle Weise könnten Sie einfach so vorgehen: Zerlegen Sie zunächst die Zeichenfolge im Format (jjjj-mm-tt), sodass Sie ein Tupel wie folgt erhalten könnten (2010, 5, 24), konvertieren Sie dann einfach dieses Tupel in ein Datumsformat wie z.B. 2010-05-24.

Sie könnten diesen Code auf einer Liste von ähnlichen Zeichenfolgenobjekten wie oben ausführen und die gesamte Liste von Tupelobjekten in Datumsobjekte umwandeln, indem Sie einfach entpacken (*tupel) den folgenden Code überprüfen.

import datetime
# für einzelne Zeichenfolge einfach verwenden:-

my_str= "24052010"
date_tup = (int(my_str[4:]),int(my_str[2:4]),int(my_str[:2]))
print(datetime.datetime(*date_tup))

Ergebnis: 2012-01-01 00:00:00 

# für eine Liste von Zeichenfolgen-Datumsobjekten könnten Sie den folgenden Code verwenden.
date_list = []
str_date = ["24052010", "25082011", "25122011","01012012"]

for items in str_date:
    date_list.append((int(items[4:]),int(items[2:4]),int(items[:2])))

for dates in date_list:
    # alle Tupelobjekte entpacken und in Datum konvertieren
    print(datetime.datetime(*dates))

Ergebnis:
2010-05-24 00:00:00
2011-08-25 00:00:00
2011-12-25 00:00:00
2012-01-01 00:00:00

2voto

shashankS Punkte 1023

Verwenden Sie das Zeitmodul, um Daten umzuwandeln.

Code-Schnipsel:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var

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