Der aktualisierte Abschnitt dieser Antwort beschreibt die Hauptursache für die Datumsunterschiede.
URSPRÜNGLICHE ANTWORT
Einige der Rohwerte in Ihrem JSON sind UNIX-Zeitstempel.
Verweis aus Ihrem Code mit Änderungen:
concerning_date_fmt = container[0]['endDate']['fmt']
concerning_date_raw = container[0]['endDate']['raw']
print(f'{concerning_date} -- {concerning_date_raw}')
# output
2019-07-28 -- 1564272000
'endDate': {'fmt': '2019-07-28', 'raw': 1564272000}
1564272000 ist die Anzahl der seit dem 01. Januar 1970 verstrichenen Sekunden. Dieses Datum war der Beginn der Unix-Epoche und die Zeit ist in der koordinierten Weltzeit (UTC). 1564272000 entspricht: 28.07.2019 00:00 Uhr (UTC).
Sie können diese Zeitstempel mithilfe der integrierten Python-Funktionen in ein Standard- Datums- / Uhrzeitformat umwandeln
from datetime import datetime
unix_timestamp = int('1548547200')
converted_timestamp = datetime.utcfromtimestamp(unix_timestamp).strftime('%Y-%m-%dT%H:%M:%SZ')
print (converted_timestamp)
# output Coordinated Universal Time (or UTC)
2019-07-28T00:00:00Z
reformatted_timestamp = datetime.strptime(converted_timestamp, '%Y-%m-%dT%H:%M:%SZ').strftime('%d-%m-%Y')
print (reformatted_timestamp)
# output
28-07-2019
Dies löst Ihr ursprüngliches Problem in Bezug auf JSON-Daten und Spaltendaten, die manchmal unterschiedlich sind, immer noch nicht. Aber hier ist meine aktuelle Hypothese in Bezug auf die auftretenden Datumsunterschiede.
Das json- Datum (fmt und raw), das aus root.App.main extrahiert wird, befindet sich in der koordinierten Weltzeit (UTC). Dies ist aufgrund des UNIX-Zeitstempels in raw klar .
Die in den Tabellenspalten angezeigten Daten scheinen in der Zeitzone Eastern Standard Time (EST) zu liegen. EST ist derzeit UTC-4. Dies bedeutet, dass 2019-07-28 22:00 (10pm) EST 2019-07-29 02:00 (2am) UTC sein würde. Die Server - Hosting finance.yahoo.com Blicke in den Vereinigten Staaten zu sein , auf der Grundlage der trace
Ergebnisse. Diese Werte befinden sich auch in der JSON- Datei:
- 'exchangeTimezoneName': 'America / New_York'
- 'exchangeTimezoneShortName': 'EDT'
Es besteht auch die Möglichkeit, dass einige der Datumsunterschiede mit dem zugrunde liegenden Reaktionscode verknüpft sind , den die Site verwendet. Dieses Problem ist schwerer zu diagnostizieren, da der Code nicht sichtbar ist.
Derzeit glaube ich, dass die beste Lösung darin besteht, den UNIX-Zeitstempel als Referenz für die Grundwahrheit zu verwenden. Diese Referenz könnte verwendet werden, um das Datum der Tabellenspalte zu ersetzen.
Es gibt definitiv eine Art von Konvertierung zwischen der JSON-Datei und den Spalten.
NVIDIA JSON-DATEI: 'endDate': {'raw': 1561766400, 'fmt': '2019-06-29'}
Spalte NVIDIA Associated Total Revenue: 30.06.2019
ABER das Datum der Spalte "Gesamteinnahmen" sollte der 28.06.2019 (EDT) sein, da der UNIX-Zeitstempel für 1561766400 der 29.06.2019, 12:00 Uhr (UTC) ist.
Die Ungleichheit mit DELL ist größer als bei einem einfachen UNIX-Zeitstempel und einer EDT-Zeitstempelkonvertierung.
DELL JSON-DATEI: {"raw": 1564704000, "fmt": "2019-08-02"}
Spalte DELL Associated Total Revenue: 31.07.2019
Wenn wir den UNIX-Zeitstempel in einen EDT-Zeitstempel konvertieren, wäre das Ergebnis der 01.08.2019, aber das ist im DELL-Beispiel vom 31.07.2019 nicht der Fall. Etwas in der Yahoo-Codebasis muss diesen Unterschied verursachen.
Ich fange an zu glauben, dass React der Schuldige an diesen Datumsunterschieden sein könnte, aber ich kann nicht sicher sein, ohne mehr Nachforschungen anzustellen.
Wenn React die Hauptursache ist, besteht die beste Option darin, die Datumselemente aus den JSON-Daten zu verwenden.
AKTUALISIERTE ANTWORT 17.10.2019
Dieses Problem ist sehr interessant, da diese Spaltendaten anscheinend mit dem offiziellen Ende des Geschäftsquartals eines Unternehmens verknüpft sind und nicht mit einem Datum der Konversation.
Hier sind einige Beispiele für
- Apple Inc. (AAPL)
- Atlassian Corporation Plc (TEAM)
- Arrowhead Pharmaceuticals, Inc. (ARWR):
Ihre Spaltendaten sind:
- 30.06.2019
- 31.03.2019
- 31.12.2008
- 30.09.2008
Diese Daten stimmen mit diesen Geschäftsquartalen überein.
- 1. Quartal (1. Quartal): 1. Januar - 31. März.
- 2. Quartal (2. Quartal): 1. April - 30. Juni.
- 3. Quartal (3. Quartal): 1. Juli - 30. September.
- 4. Quartal (4. Quartal): 1. Oktober - 31. Dezember
Diese Enddaten für das Geschäftsquartal können sehr unterschiedlich sein, wie dieses DELL-Beispiel zeigt.
DELL (veröffentlicht in NASDAQ) Ende des Geschäftsquartals: Juli 2019
Datum der Yahoo Finance- Spalte: 31.07.2019
JSON-Datum: 02.08.2019
Von der Website des Unternehmens:
Wann endet das Geschäftsjahr von Dell Technologies?
- Unser Geschäftsjahr ist der 52- oder 53-wöchige Zeitraum, der am Freitag, dem 31. Januar, endet. Unser Geschäftsjahr 2020 endet am 31. Januar 2020. Für frühere Geschäftsjahre siehe Liste unten: Unser Geschäftsjahr 2019 endete am 1. Februar. 2019 Unser Geschäftsjahr 2018 endete am 2. Februar 2018 Unser Geschäftsjahr 2017 endete am 3. Februar 2017 Unser Geschäftsjahr 2016 endete am 29. Januar 2016 Unser Geschäftsjahr 2015 endete am 30. Januar 2015 Unser Geschäftsjahr 2014 endete am 31. Januar 2014 Unser Geschäftsjahr 2013 endete am 1. Februar 2013
HINWEIS: Die Daten 05-03-19 und 08-02-19.
Diese stammen aus den JSON-Quartalsdaten für DELL:
- {'raw': 1564704000, 'fmt': '2019-08-02'}
- {'raw': 1556841600, 'fmt': '2019-05-03'}
Es scheint, dass diese Spaltendaten mit den Enddaten des Geschäftsquartals eines Unternehmens verknüpft sind. Daher würde ich empfehlen, dass Sie entweder das JSON-Datum als primäres Referenzelement oder das entsprechende Spaltendatum verwenden.
PS: Bei Yahoo gibt es eine Art von Datums-Voodoo, da diese Spaltenquartalsdaten anscheinend basierend auf Feiertagen, Wochenenden und Monatsende verschoben werden.