Excel-Datumsunterschied beträgt vier Jahre: Sehen Sie sich zunächst das Datumssystem der Arbeitsmappe an
iso_dates steuert die Datumsserialisierungsmethode in der Datei und wandelt die Datumszeit im Speicher nicht automatisch in eine Zeichenfolge um. Die Datumsseriennummer erfordert die Epoche der Arbeitsmappe; Hier vergleichen wir die beiden Datumssysteme und prüfen die gespeicherten XML- und Readback-Werte.
Excel exportiert Daten, die um vier Jahre versetzt sind, und in den meisten Fällen liegt das Problem am Datumssystem der Arbeitsmappe und nicht an den Daten selbst. Geschrieben für Entwickler und Datenverantwortliche, die für Berichtsexporte, ETL-Skripte oder den plattformübergreifenden Austausch von Excel-Dateien verantwortlich sind. Wenn Sie auf Situationen wie eine allgemeine Datumsverschiebung, Zahlen, die nicht als Datumsangaben angezeigt werden können, Datenanomalien um 1900 usw. stoßen, können Sie zunächst in der Reihenfolge dieses Artikels eine Fehlerbehebung durchführen.
Nachdem Sie diesen Artikel gelesen haben, werden Sie den Unterschied zwischen den beiden Datumssystemen von 1900 und 1904 verstehen, wissen, wie man workbook.epoch liest, um das von der aktuellen Arbeitsmappe verwendete System zu bestätigen, und die Akzeptanzmethode zum Überprüfen von XML und zum Zurücklesen von Werten nach dem Speichern beherrschen. Der Code und die Tabellen in diesem Artikel werden mit synthetischen Beispielen illustriert, die als Checkliste vor der Arbeit mit echten Dokumenten geeignet sind.
Was soll ich tun, wenn das Excel-Datum vier Jahre unterschiedlich ist? Fazit in einem Satz
Lesen Sie zunächst die workbook.epoch der Arbeitsmappe und bestätigen Sie das Datumssystem vor der Konvertierung. Grenzdatums- und Zeitzonenprobleme werden separat behandelt.
| Ihre Situation | Empfohlene Praktiken | Grund |
|---|---|---|
| Das exportierte Datum ist insgesamt um ca. 1462 Tage versetzt | Lesen Sie zuerst workbook.epoch, um das Datumssystem der Arbeitsmappe zu bestätigen | Der Unterschied zwischen den Systemen 1900 und 1904 beträgt 1462 Tage, und falsche Annahmen auf der Leseseite führen dazu, dass alle Seriennummern falsch interpretiert werden |
| Die Zelle ist eine Zahl, kann aber nicht als Datum angezeigt werden | Überprüfen und vervollständigen Sie die Datumsformatmaske number_format | Wenn der numerische Typ korrekt ist, führen fehlende Formate zu Anzeigeanomalien. |
| In den Daten erscheinen Daten vor März 1900 oder 1900-02-29 | Als ungültig markieren oder zur manuellen Überprüfung übertragen, die ursprüngliche Seriennummer behalten | Dieses Datum existiert im gregorianischen Kalender nicht und sollte nicht zwangsweise umgerechnet werden |
datetime mit Zeitzone muss geschrieben werden | Entfernen Sie tzinfo nach der einheitlichen Konvertierung in UTC | Excel unterstützt das Speichern von Zeitzonen nicht, alle Zeiten sind Ortszeit ohne Kenntnis |
| Dateien müssen plattformübergreifend ausgetauscht werden | Datumssystem explizit deklarieren | Die Standardeinstellungen des Empfängers sind unterschiedlich, was zu einem stillen Offset führen kann |
Unterschiede zwischen den Datumssystemen von 1900 und 1904
Ein Datum in einer XLSX-Datei ist im Wesentlichen eine Gleitkomma-Seriennummer und ihre Bedeutung hängt vollständig vom Datumssystem ab, an das die Arbeitsmappe gebunden ist. Die XLSX-Spezifikation erlaubt zwei Basisepochen:
- 1900-Datumssystem: Wird standardmäßig von Windows verwendet, Seriennummer 1 steht für 1900-01-01
- Datumssystem 1904: Wird standardmäßig auf frühen Macs verwendet. Die Seriennummer 0 steht für den 01.01.1904
Zwischen beiden besteht ein fester Versatz von 1462 Tagen, der die Hauptursache für die „Datumsdifferenz von vier Jahren"darstellt. Darüber hinaus weist das 1900-System ein historisches Problem auf: Es behandelt 1900 fälschlicherweise als Schaltjahr, was dazu führt, dass das nicht existierende Datum 1900-02-29 in Excel legalisiert wird.
Kernvergleich
| Projekt | Datierungssystem von 1900 | Datumssystem von 1904 |
|---|---|---|
| Startpunkt der Seriennummer | Seriennummer 1 entspricht dem 01.01.1900 | Die Seriennummer 0 entspricht dem 01.01.1904 |
| Gängige Standardquellen | Windows | Früher Mac |
| Versatz von einem anderen System | Ein Unterschied von 1.462 Tagen | Ein Unterschied von 1.462 Tagen |
| Sonderausgaben | 1900 wird fälschlicherweise als Schaltjahr gezählt, existiert am 29.02.1900 | Dieser Artikel behandelt solche Themen nicht |
Warum Daten aus der Ferne von 1900 Jahren besondere Vorsicht erfordern
Wenn Sie es mit historischen Daten vor März 1900 zu tun haben, kann dasdatetime-Modul von Python den 29. Februar nicht direkt darstellen. Laut der offiziellen OpenPyxl-Dokumentation simuliert die Bibliothek zur Unterstützung des Excel-Verhaltens diese Ausnahme beim Lesen von Terminen für Januar und Februar auf dem System von 1900, aber am 29.02.1900 selbst kann sie nicht in ein gültiges Python-datetime-Objekt umwandeln.
Für die meisten modernen Geschäftsdaten besteht der Schlüssel darin, herauszufinden, welches System das aktuelle Arbeitsbuch verwendet, und es beim Austausch von Dateien plattformübergreifend explizit zu deklarieren, um lautlose Verschiebungen durch unterschiedliche Standardeinstellungen des Empfängers zu vermeiden.
Beispiel für Synthese: Randeingabe und Verarbeitungsmethoden
Um das Problem zu veranschaulichen, stellen wir uns ein Syntheseszenario vor: Ein Finanzsystem exportiert Berichte mit dem Datumssystem von 1904, aber die nachgelagerten ETL-Skripte analysieren standardmäßig das System von 1900.
Umgang mit Fehlern oder Randeingaben:
- Wenn man die Seriennummer 60 eingibt und das Arbeitsbuch im 1900-System ist, entspricht es dem fiktiven 1900-02-29 in Excel. Native Python
datetimewirftValueError. - An diesem Punkt keine Umrechnung erzwingen; stattdessen erfassen Sie die Anomalie und notieren Sie sie als ursprünglichen Wert oder speziellen Marker, da das Datum im gregorianischen Kalender nicht existiert.
- Wenn ein
datetime-Objekt mit Zeitzoneninformationen eingegeben und geschrieben wird, konvertiert openpyxl die Zeitzone nicht automatisch, sondern entfernt zunächst tzinfo; andernfalls können Schreibfehler oder Fehler auftreten. - Excel selbst unterstützt keine Zeitzonenspeicherung; alle Zeit ist unmerkliche lokale Zeit.
Code zur Erkennung und Umwandlung von Datumssystemen
Das folgende Beispiel zeigt, wie man sicher mit Unterschieden im Speicher im Datumssystem umgeht. Der Code dient nur der logischen Demonstration und liest oder schreibt keine Dateien. Er muss in Ihrer eigenen gesperrten Abhängigkeitsumgebung laufen. Openpyxl >= 3.1.0 wird empfohlen. Das Beispiel enthält keine Netzwerkanfragen oder Dateiüberschreiboperationen; alle Behauptungen basieren auf synthetischen Daten.
from datetime import datetime
from io import BytesIO
from zipfile import ZipFile
from openpyxl import Workbook, load_workbook
from openpyxl.utils.datetime import from_excel, CALENDAR_MAC_1904, CALENDAR_WINDOWS_1900
assert from_excel(1, CALENDAR_MAC_1904) == datetime(1904, 1, 2)
assert from_excel(1, CALENDAR_WINDOWS_1900) == datetime(1900, 1, 1)
wb = Workbook()
wb.epoch = CALENDAR_MAC_1904
wb.iso_dates = True
value = datetime(2026, 9, 26, 12, 30)
wb.active["A1"] = value
assert wb.active["A1"].value == value
out = BytesIO()
wb.save(out)
with ZipFile(BytesIO(out.getvalue())) as z:
xml = z.read("xl/worksheets/sheet1.xml")
assert b't="d"' in xml and b"2026-09-26T12:30:00" in xml
restored = load_workbook(BytesIO(out.getvalue()))
assert restored.active["A1"].value == value
assert restored.epoch == CALENDAR_MAC_1904
Annahmekriterien und Grenzen für manuelle Überprüfungen
| Beobachten Sie das Phänomen | Eingabe- oder Randbedingungen | Erwartete Ergebnisse oder Verarbeitungsentscheidungen | Ob Automatisierung geeignet ist |
|---|---|---|---|
| Alle Daten werden einheitlich um 1462 Tage versetzt | wb.epoch entspricht nicht der analytischen Annahme | Nach dem Lesen von wb.epoch wird die Seriennummer erneut umgewandelt | Ja |
| Am 29.02.1900 erschien in den Daten | System von 1900 mit Seriennummer 60 | Markiere als ungültiges Datum und behalte die ursprüngliche Seriennummer 60 | Nein, die Bedeutung des Unternehmens muss manuell bestätigt werden |
| Zeit geht teilweise verloren oder ist fehlgeleitet | Geben Sie datetime mit tzinfo ein | Nach der gleichmäßigen Umwandlung in UTC wird das tzinfo entfernt und erneut geschrieben | Manche erfordern, dass die Zielzeitzone manuell definiert wird |
| Zellen zeigen Nummern an, sind aber im Format von Daten angegeben | Der Werttyp ist korrekt, aber number_format fehlt | Überprüfen und füllen Sie die Datumsformat-Maske aus | Ja |
| Historische Daten (vor dem 01.01.1900) zeigen Anomalien | Datum vor dem 01.01.1900 | Wechsel zu Textspeicher oder speziellen historischen Datenbanken | Nein, XLSX ist für dieses Szenario nicht geeignet |
Beachten Sie, dass die Code-Demonstration nur die Korrektheit der Umwandlungslogik überprüft und keinen End-to-End-Effekt darstellt. Reale Dateien können mehrere Datumsformate, bedingte Formate oder durch Formeln generierte Daten mischen, die alle zusätzliche Pars-Schichten erfordern. Wenn Daten vor März 1900, zeitübergreifende Kollaborationsdaten oder nicht-standardisierte Kalender (wie Mond- oder Geschäftsjahre) auftreten, sollten manuelle Überprüfungsprozesse verwendet werden, und automatisierte Skripte sollten nicht willkürlich verändert werden.
🎯 Welche Methode passt zu dir?
Wenn du das Datum aus der Exportdatei lesen musst
Lesen Sie zuerst workbook.epoch, bestätigen Sie das Datumssystem und entscheiden Sie dann, ob die Seriennummer neu umgewandelt werden soll.
Wenn Ihre Daten Daten vor März 1900 enthalten
Markieren Sie den Eintrag zum 29.02.1900 als ungültig, behalten Sie die ursprüngliche Seriennummer und übergeben Sie sie einem Handbuch, um die geschäftliche Bedeutung zu bestätigen.
Wenn du Zeit mit Zeitzonen in Excel schreiben musst
Zuerst gleichmäßig in UTC konvertieren, dann tzinfo entfernen; Die Zielzeitzone muss manuell definiert werden.
Wenn du Dateien mit anderen Systemen austauschen willst
Erklärt ausdrücklich das Datumssystem und überprüft den Datumswert, der auf der empfangenden Seite zurückgelesen werden soll.
❓ Häufig gestellte Fragen (FAQ)
1. Warum wird das Exportdatum insgesamt um etwa vier Jahre verschoben?
Ein häufiger Grund ist, dass das Datumssystem des Arbeitsbuchs nicht mit den Annahmen auf der Leseseite übereinstimmt. Zwischen den Systemen von 1900 und 1904 liegt eine Lücke von 1.462 Tagen.
2. iso_dates: Wird es automatisch Datumszeit in eine Zeichenkette umwandeln?
Nein. iso_dates steuert nur die Datumsserialisierungsmethode in der Datei und wandelt datetime im Speicher nicht automatisch in eine Zeichenkette um.
3. Warum kann der 29.02.1900 nicht in Python Datetime umgewandelt werden?
Das System von 1900 behandelt 1900 fälschlicherweise als Schaltjahr, wodurch 1900-02-29 in Excel existiert, aber nicht im gregorianischen Kalender. Pythons datetime wirft ValueError, das den ursprünglichen Wert oder das spezielle Tag aufzeichnen sollte.
4. Wie sollte man Datetime mit einer Zeitzone in Excel schreiben?
Excel unterstützt das Speichern von Zeitzonen nicht. Zuerst sollte es einheitlich in UTC umgewandelt und dann nach dem Strippen von tzinfo geschrieben werden; OpenPyXL wandelt Zeitzonen nicht automatisch um.
📝 Zusammenfassung
Probleme mit Datumsverschiebungen entstehen meist durch das Datumssystem des Arbeitsbuchs. Bestätigen Sie workbook.epoch vor der Konvertierung, um die meisten stillen Fehler zu vermeiden. Fragen zu Grenzdatums und Zeitzonen sollten der manuellen Überprüfung übergeben werden.
Referenzen und nächste Schritte
- Offizielles OpenPyxl-Datums- und Uhrzeitdokument: https://openpyxl.readthedocs.io/en/stable/datetime.html
- Microsoft-Erklärung des Datumssystems 1900/1904: https://docs.microsoft.com/en-us/office/troubleshoot/excel/1900-and-1904-date-system
- Microsoft-Erklärung zum Schaltjahr-Fehler von 1900: https://docs.microsoft.com/en-us/office/troubleshoot/excel/wrongly-assumes-1900-is-leap-year
Als Nächstes: Wählen Sie ein ängstliches Excel-Beispiel, auf das Sie Zugriff haben, führen Sie den oben genannten Epochenerkennungscode aus und bestätigen, ob dessen Datumssystem mit Ihrer Verarbeitungslogik übereinstimmt. Wenn Unstimmigkeiten festgestellt werden, passen Sie die Umwandlungsparameter an, bevor die übersetzte Lieferung erstellt wird.
Verwenden Sie diese Checkliste für die Dokumentenübersetzung
Zuerst entscheiden Sie, welcher Inhalt Text ist, welcher Formel und Geschäftscode, und übersetzen Sie dann die Tabelle. Die Nachkontrolle bestätigt nicht nur, ob Chinesisch in die Zielsprache übergewandelt wurde, sondern stellt auch sicher, dass Formeln, Kennungen und Zitationsbeziehungen nicht verändert wurden.
OmniDoc (Produkteinführung) bietet Multiformat-Dokumentenübersetzungsportale an, und seine offizielle Website führt OCR, Glossare und zweisprachige Referenzfunktionen ein. Für Teams, die direkt von den Dateien ausgehen wollen, ist dies ein Weg, den man mit echten Proben bewerten sollte. Bitte verwenden Sie die anonymisierte Datei, die Sie autorisiert haben, um die Ergebnisse mit der Checkliste in diesem Artikel zu überprüfen. Dieser Artikel behauptet nicht, dass OmniDoc die im Artikel erwähnten Open-Source-Bibliotheken oder internen Algorithmen verwendet, noch ersetzt er Produktperformance-Tests durch Beispiele.


