Phần cập nhật của câu trả lời này nêu ra nguyên nhân gốc rễ của sự khác biệt ngày.
CÂU TRẢ LỜI
Một số giá trị thô trong JSON của bạn là dấu thời gian UNIX.
Tham chiếu từ mã của bạn với các sửa đổi:
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', 'thô': 1564272000}
1564272000 là số giây trôi qua kể từ ngày 1 tháng 1 năm 1970. Ngày này là ngày bắt đầu của Thời đại Unix và thời gian là trong Giờ quốc tế phối hợp (UTC). 1564272000 tương đương với: 28/07/2019 12:00 sáng (UTC).
Bạn có thể chuyển đổi các dấu thời gian này sang định dạng datetime tiêu chuẩn bằng cách sử dụng các hàm Python tích hợp
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
Điều này vẫn không giải quyết được vấn đề ban đầu của bạn liên quan đến ngày JSON và ngày cột khác nhau. Nhưng đây là giả thuyết hiện tại của tôi liên quan đến sự chênh lệch ngày đang xảy ra.
Ngày json (fmt và raw) đang được trích xuất từ root.App.main đang trong Giờ phối hợp quốc tế (UTC). Điều này là rõ ràng vì dấu thời gian UNIX ở dạng thô .
Các ngày được hiển thị trong các cột của bảng dường như nằm trong múi giờ Giờ chuẩn miền đông (EST). EST hiện là UTC-4. Điều đó có nghĩa là 2019-07-28 22:00 (10pm) EST sẽ là 2019-07-29 02:00 (2am) UTC. Máy chủ lưu trữ tài chính.yahoo.com dường như ở Hoa Kỳ, dựa trên
kết quả theo dõi . Các giá trị này cũng nằm trong tệp json :
- 'exchangeTimezoneName': 'America / New_York'
- 'exchangeTimezoneShortName': 'EDT'
Cũng có khả năng một số khác biệt về ngày tháng được liên kết với mã React cơ bản mà trang web sử dụng. Vấn đề này khó chẩn đoán hơn, vì mã không hiển thị.
Tại thời điểm này tôi tin rằng giải pháp tốt nhất sẽ là sử dụng dấu thời gian UNIX làm tài liệu tham khảo thời gian thực của bạn. Tham chiếu này có thể được sử dụng để thay thế ngày của cột bảng.
Chắc chắn có một số loại chuyển đổi xảy ra giữa tệp JSON và các cột.
NVIDIA JSON FILE: 'endDate': {'raw': 1561766400, 'fmt': '2019-06-29'}
Cột Tổng doanh thu liên kết của NVIDIA: 30/12/2019
NHƯNG ngày cột Tổng doanh thu phải là 6/11/2019 (EDT), vì dấu thời gian UNIX cho 1561766400 là 12:00 sáng (UTC).
Sự chênh lệch với DELL lớn hơn dấu thời gian UNIX cơ bản và chuyển đổi dấu thời gian EDT.
DELL JSON FILE: {"raw": 1564704000, "fmt": "2019-08-02"}
Cột tổng doanh thu của DELL: 31/07/2019
Nếu chúng ta chuyển đổi dấu thời gian UNIX thành dấu thời gian EDT, kết quả sẽ là 8/1/2019, nhưng đó không phải là trường hợp trong ví dụ DELL, đó là ngày 31 tháng 7 năm 2019. Một cái gì đó trong cơ sở mã Yahoo phải gây ra sự khác biệt này.
Tôi bắt đầu tin rằng React có thể là thủ phạm với những khác biệt về ngày tháng này, nhưng tôi không thể chắc chắn nếu không nghiên cứu thêm.
Nếu React là nguyên nhân gốc thì tùy chọn tốt nhất sẽ là sử dụng các phần tử ngày từ dữ liệu JSON.
CẬP NHẬT TRẢ LỜI 10-17-2019
Vấn đề này rất thú vị, vì dường như những ngày cột này được liên kết với kết thúc chính thức của quý tài chính của công ty và không phải là vấn đề cuộc trò chuyện ngày.
Dưới đây là một số ví dụ cho
- Apple Inc. (AAPL)
- Tập đoàn Atlassian Plc (TEAM)
- Arrowhead Enterprises, Inc. (ARWR):
Ngày cột của họ là:
- 30 tháng 6 năm 2019
- 31/03/2019
- 31/12/2018
- 30/9/2018
Những ngày này phù hợp với các quý tài chính.
- Quý 1 (Q1): 1 tháng 1 - 31 tháng 3.
- Quý 2 (quý 2): 1 tháng 4 - 30 tháng 6.
- Quý 3 (Quý 3): 1 tháng 7 - 30 tháng 9.
- Quý 4 (Q4): 1 tháng 10 - 31 tháng 12
Những ngày kết thúc quý tài chính này có thể thay đổi lớn như ví dụ DELL này cho thấy.
DELL (đăng trong NASDAQ) Cuối quý tài chính: tháng 7 năm 2019
Tài chính yahoo
Cột ngày: 31/07/2019
Ngày JSON: 2019-08 / 02
Từ trang web của công ty:
Khi nào năm tài chính của Dell Technologies kết thúc?
- Năm tài chính của chúng tôi là giai đoạn 52 hoặc 53 tuần kết thúc vào thứ Sáu gần nhất vào ngày 31 tháng 1. Năm tài chính 2020 của chúng tôi sẽ kết thúc vào ngày 31 tháng 1 năm 2020. Đối với các năm tài chính trước, hãy xem danh sách dưới đây: Năm tài chính 2019 của chúng tôi kết thúc vào ngày 1 tháng 2, 2019 Năm tài chính 2018 của chúng tôi kết thúc vào ngày 2 tháng 2 năm 2018 Năm tài chính 2017 của chúng tôi kết thúc vào ngày 3 tháng 2 năm 2017 Năm tài chính 2016 của chúng tôi kết thúc vào ngày 29 tháng 1 năm 2016 Năm tài chính 2015 của chúng tôi kết thúc vào ngày 30 tháng 1 năm 2015 Năm tài chính 2014 của chúng tôi kết thúc vào ngày 31 tháng 1 năm 2015 2014 Năm tài chính 2013 của chúng tôi kết thúc vào ngày 1 tháng 2 năm 2013
LƯU Ý: Ngày 05-03-19 và 08-02-19.
Đây là từ dữ liệu quý JSON cho DELL:
- {'thô': 1564704000, 'fmt': '2019-08-02'}
- {'thô': 1556841600, 'fmt': '2019-05-03'}
Có vẻ như các ngày cột này được liên kết với ngày kết thúc quý tài chính của công ty. Vì vậy, tôi khuyên bạn nên sử dụng ngày JSON làm phần tử tham chiếu chính hoặc ngày cột tương ứng.
PS Có một số loại voodoo ngày xảy ra tại Yahoo, bởi vì họ dường như di chuyển các ngày quý này dựa trên các ngày lễ, cuối tuần và cuối tháng.