2017-11-09 2 views
2

Ich habe ein Datumsformat, in dem Datumsangaben als Ganzzahlen ab 1/1/1900 dargestellt werden. Zum Beispiel: 1 ist 1/1/1900 und 42998 ist 20/9/2017.Konvertieren von Ganzzahl-Datumsformat in ein für Menschen lesbares Format

Wie kann ich dieses Format in ein für Menschen lesbares Format wie TT/MM/JJJJ konvertieren? Ich habe datetime Dokumentation überprüft, aber ich habe keine Möglichkeit gefunden, dies zu tun. Ich möchte dies entweder auf Python 3 oder 2.7 tun.

Danke für jeden Vorschlag.

+0

Sollte das Datum nicht 21/9/2017 sein? – EdChum

+0

Ich benutzte Excel diese Zahl bis heute zu konvertieren und es gab mir 20/9/2017 –

+0

Ich weiß nicht, wie Excel dies tut, aber Python stimmt nicht überein, aus irgendeinem Grund bekomme ich unterschiedliche Ergebnisse, je nachdem, wo ich die Berechnungen mache: http://www.convertit.com/Go/ConvertIt/Calculator/Date_and_Time/Date_Time_Diff_Calc.ASP stimmt mit Ihnen überein und dieser https://www.epochconverter.com/date-difference stimmt mit python überein – EdChum

Antwort

2

Sie können Ihre Termine als Offsets von Ihrem basetime definieren und eine Datetime-Konstrukt:

In[22]: 
import datetime as dt 
dt.datetime(1900,1,1) + dt.timedelta(42998) 

Out[22]: datetime.datetime(2017, 9, 22, 0, 0) 

Sobald es ein datetime Objekt, das Sie dies einem str über strftime umwandeln kann mit welchem ​​Format auch immer Sie wünschen:

In[24]: 
(dt.datetime(1900,1,1) + dt.timedelta(42998-1)).strftime('%d/%m/%Y') 

Out[24]: '21/09/2017' 

So können Sie eine Benutzerfunktion definieren, um dies zu tun:

In[27]: 
def dtToStr(val): 
    base = dt.datetime(1900,1,1) 
    return (base + dt.timedelta(val-1)).strftime('%d/%m/%Y') 
dtToStr(42998) 

Out[27]: '21/09/2017' 
0

Sie können dazu ein Objekt datetime verwenden.

import datetime 
d = datetime.datetime(1900, 1, 1, 0, 0) 
d + datetime.timedelta(days = 42998) 
>> datetime.datetime(2017, 9, 22, 0, 0) 
1
import datetime 

base_date = datetime.datetime(1900, 1, 1) 
convert = lambda x: base_date + datetime.timedelta(days=x-1) 
>>> convert(42998) 
datetime.datetime(2017, 9, 21, 0, 0) 
Verwandte Themen