A seção atualizada desta resposta descreve a causa raiz das diferenças de data.
RESPOSTA ORIGINAL
Alguns dos valores brutos em seu JSON são carimbos de data e hora do UNIX.
Referência do seu código com modificações:
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', 'bruto': 1564272000}
1564272000 é o número de segundos decorridos desde 01 de janeiro de 1970. Esta data foi o início da época do Unix e a hora está no Tempo Universal Coordenado (UTC). 1564272000 é o equivalente a: 28/07/2019 00:00 (UTC).
Você pode ocultar esses registros de data e hora em um formato padrão de data e hora usando funções Python internas
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
Isso ainda não resolve o problema original relacionado às datas JSON e às datas da coluna sendo diferentes às vezes. Mas aqui está minha hipótese atual relacionada às disparidades de data que estão ocorrendo.
A data json (fmt e raw) que está sendo extraída do root.App.main está no Tempo Universal Coordenado (UTC). Isso fica claro devido ao carimbo de data e hora do UNIX em bruto .
As datas exibidas nas colunas da tabela parecem estar no fuso horário da hora padrão do leste (EST). EST é atualmente UTC-4. O que significa que 2019-07-28 22:00 (22:00) EST seria 2019-07-29 02:00 (02:00) UTC. O servidor que hospeda o finance.yahoo.com parece estar nos Estados Unidos, com base nos
resultados do traceroute . Esses valores também estão no arquivo json :
- 'exchangeTimezoneName': 'America / New_York'
- 'exchangeTimezoneShortName': 'EDT'
Também existe a possibilidade de que algumas diferenças de data estejam vinculadas ao código React subjacente , usado pelo site. Esse problema é mais difícil de diagnosticar, porque o código não está visível.
No momento, acredito que a melhor solução seria usar o registro de data e hora do UNIX como referência de hora da verdade. Esta referência pode ser usada para substituir a data da coluna da tabela.
Definitivamente, existe algum tipo de conversão acontecendo entre o arquivo JSON e as colunas.
ARQUIVO NVIDIA JSON: 'endDate': {'raw': 1561766400, 'fmt': '2019-06-29'}
Coluna Receita Total Associada da NVIDIA: 30/06/2019
MAS a data da coluna Receita total deve ser 28/06/2019 (EDT), porque o registro de data e hora UNIX para 1561766400 é 29/06/2019 00:00 (UTC).
A disparidade com a DELL é maior que um registro de data e hora básico do UNIX e uma conversão de registro de data e hora do EDT.
ARQUIVO DELL JSON: {"bruto": 1564704000, "fmt": "2019-08-02"}
Coluna Receita Total Associada da DELL: 31/07/2019
Se convertermos o registro de data e hora do UNIX em um registro de data e hora de EDT, o resultado será 1/8/2019, mas esse não é o caso no exemplo da DELL, que é 31/07/2019. Algo na base de códigos do Yahoo deve estar causando essa diferença.
Estou começando a acreditar que o React pode ser o culpado com essas diferenças de datas, mas não posso ter certeza sem fazer mais pesquisas.
Se React for a causa raiz, a melhor opção seria usar os elementos de data dos dados JSON.
RESPOSTA ATUALIZADA 10-17-2019
Esse problema é muito interessante, porque parece que essas datas da coluna estão vinculadas ao final oficial do trimestre fiscal de uma empresa e não a um problema de conversação de data.
Aqui estão vários exemplos para
- Apple Inc. (AAPL)
- Atlassian Corporation Plc (EQUIPE)
- Arrowhead Pharmaceuticals, Inc. (ARWR):
As datas das colunas são:
- 30/06/2019
- 31/03/2019
- 31/12/2018
- 30/09/2018
Essas datas correspondem a esses trimestres fiscais.
- Trimestre 1 (Q1): 1º de janeiro a 31 de março.
- Trimestre 2 (Q2): 1º de abril a 30 de junho.
- 3º trimestre (terceiro trimestre): 1º de julho a 30 de setembro.
- 4º trimestre (quarto trimestre): 1º de outubro a 31 de dezembro
Essas datas de término do trimestre fiscal podem variar bastante, como mostra o exemplo da DELL.
DELL (publicado na NASDAQ) Fim do trimestre fiscal: julho de 2019
Data da coluna do Yahoo Finance : 31/07/2019
Data do JSON: 2019-08-02
No site da empresa:
Quando o ano fiscal da Dell Technologies termina?
- Nosso ano fiscal é o período de 52 ou 53 semanas que termina na sexta-feira mais próxima a 31 de janeiro. Nosso ano fiscal de 2020 terminará em 31 de janeiro de 2020. Para exercícios fiscais anteriores, veja a lista abaixo: Nosso ano fiscal de 2019 terminou em 1º de fevereiro, 2019 Nosso ano fiscal de 2018 terminou em 2 de fevereiro de 2018 Nosso ano fiscal de 2017 terminou em 3 de fevereiro de 2017 Nosso ano fiscal de 2016 terminou em 29 de janeiro de 2016 Nosso ano fiscal de 2015 terminou em 30 de janeiro de 2015 Nosso ano fiscal de 2014 terminou em 31 de janeiro de 2014 Nosso ano fiscal de 2013 terminou em 1º de fevereiro de 2013
NOTA: As datas 05-03-19 e 08-02-19.
Estes são dos dados trimestrais JSON da DELL:
- {'raw': 1564704000, 'fmt': '2019-08-02'}
- {'raw': 1556841600, 'fmt': '2019-05-03'}
Parece que essas datas da coluna estão vinculadas às datas de término do trimestre fiscal de uma empresa. Portanto, recomendo que você use a data JSON como elemento de referência principal ou a data da coluna correspondente.
PS: Existe algum tipo de vodu de data no Yahoo, porque eles parecem mover essas datas do trimestre da coluna com base em feriados, fins de semana e final de mês.