Tôi đang xây dựng một ứng dụng sẽ phục vụ mọi người ở những nơi khác nhau trên thế giới.
Tôi đang sử dụng Django-Rest-Framwork cho giao tiếp giữa khách hàng và máy chủ.
Tất cả giá trị Ngày giờ được lưu vào DB dưới dạng UTC (Tôi có USE_TZ = True
và TIME_ZONE = 'Greenwich'
trong settings.py).Trình hiển thị/trình phân tích cú pháp khung thời gian Django-rest-frame
Tôi sẽ nhận được từ người dùng múi giờ địa phương của họ.
Để kiểm tra DRF cho nhận thức múi giờ tôi đã viết middleware này với múi giờ cố định:
import pytz
from django.utils import timezone
class TimezoneMiddleware(object):
def process_request(self, request):
timezone.activate(pytz.timezone("Asia/Jerusalem"))
Vấn đề là:
Tôi có một trường hợp trong đó tôi nhận được từ người sử dụng "start_time" và Các trường "end_time" containting datetimes trong người dùng LOCAL múi giờ của bạn thông qua các UnicodeJSONRenderer
đến một ModelSerializer
và sau đó được lưu vào DB. Tuy nhiên, chúng được lưu như thể chúng ở trong UTC. Tại thời điểm này tôi mong đợi bộ nối tiếp (hoặc phân tích cú pháp) xử lý đầu vào datetime từ người dùng là datetime cần được chuyển đổi từ "Asia/Jerusalem" sang UTC trước khi lưu vào DB kể từ khi tôi thực hiện timezone.activate(pytz.timezone("Asia/Jerusalem"))
.
Điều tương tự cũng xảy ra khi dữ liệu được phân tích ngược lại trong phản hồi qua JSONParser
.
Trong khi mong đợi các trường DateTime trong JSON trả về nằm trong múi giờ được kích hoạt trong phần mềm trung gian, chúng được trả về dưới dạng UTC.
Tôi có thể dễ dàng đạt được điều đó như thế nào trong DRF?
Bạn đã tìm thấy một dung dịch? – yakxxx
@yakxxx - Thật không may là chưa. Bây giờ tôi nhận được và trả về giá trị datetime trong GMT và chuyển đổi sang múi giờ địa phương được thực hiện ở phía khách hàng. – OrPo
Bạn có thể gửi yêu cầu không? Tôi tự hỏi bạn đã sử dụng định dạng nào bên trong JSON? Bạn đang sử dụng một chuỗi thời gian nhận biết chuỗi ISO 8601? – codingjoe