2016-07-20 9 views
0

Ich versuche, Daten zu analysieren, die ich von einer Excel-Datei in Python erhalten habe. Dazu benutze ich die xlrd Bibliothek. Ich habe eine Zelle in Excel, deren Wert ist 5/16/2016 12:15 und ich erhalte es in Python als 42506.6493. Ich verstehe, dass Excel das Datum als die Anzahl der Tage seit 1.1.1900 speichert. Also in Python Ich versuche, diese Anzahl von Tagen hinzufügen (nur Tagen jetzt ohne die Fraktion, die die Zeit darstellt) mit dem gleichen Datum zu erhalten, mit dem Code unten:Datumsumrechnungsdifferenz zwischen Python Datetime und Excel

orgDate = datetime.datetime(1900,1,1,0,0,0,0) 
xlVal = 42506.6493 
newDate = orgDate + datetime.timedelta(days=int(xlVal)) 

aber wenn ich den Wert lesen newDate Ich finde es datetime.datetime(2016, 5, 18, 0, 0) während es sollte 16. Mai nicht 18. Jeder weiß, wie man damit umgeht?

+0

Ich bin kein Python-Entwickler, aber nicht int() den Wert auf eine volle Zahl runden? Also wird Ihr Bruch ".6493" auf "+1" aufgerundet, was bedeutet, dass 42506 zu 42507 wird? – Andreas

+0

Wenn ich mit dem oben genannten richtig bin, dann gibt es einen Tag diff. Das könnte vielleicht daran liegen, dass Tag 0 in Excel Tag 1 in Python ist? So 1900-01-01 12:00 ist in Excel "0,5", aber in Python Datetime "1.5"? – Andreas

+0

Hallo Andreas. Nein, int (x.y) gibt x zurück. Es gibt auch einen zweitägigen Unterschied (18 -> 16) – Y2H

Antwort

1

Bitte konsultieren Sie die xlrd documentation, insbesondere den Abschnitt dates in Excel.

Daten beginnen nicht wirklich um 1900-01-01. Sie haben einen zweitägigen Unterschied, weil (1) Excel den Lotus 1-2-3-Fehler beibehält, der 1900 ein Schaltjahr berücksichtigt und (2) selbst wenn Daten um 1900-01-01 beginnen würden, dann würde das 1900-01 ergeben -01 Tag 1, nicht Tag 0, also musst du dein Timedelta entsprechend anpassen.

Aber wirklich, nur sparen Sie sich den Ärger und verwenden Sie xlrd eingebauten Datum Einrichtungen, xldate_as_tuple oder xldate_as_datetime.

+0

Ja, ich endete mit 'xldate_au_tuple' am Ende. Aber trotzdem ist deine Erklärung sehr hilfreich. Vielen Dank, ich gebe dir die beste Antwort! – Y2H