Cách tôi thực hiện việc này là sử dụng tên múi giờ hợp lệ của pytz. Tôi điều chỉnh danh sách của tôi để chỉ phản ánh những cái tôi cần, tức là
TIMEZONES = (
'Canada/Atlantic',
'Canada/Central',
'Canada/Eastern',
'Canada/Mountain',
'Canada/Pacific',
)
sau đó tôi có một lớp trí mà đặt múi giờ như một Dòng Char như vậy:
class Location(models.Model):
....
time_zone = models.CharField(max_length=100, blank=True, null=True, choices=TIMEZONES) # 64 min
....
Thông báo tôi đặt trống & rỗng thành True để tạo trường tùy chọn. Hãy xem django-timezone-field fields.py để biết thêm ý tưởng.
Để sử dụng điều này trong mã của tôi với pytz, tôi nhập múi giờ:
from pytz import timezone
import datetime
from locations.models import Location # my object that has the time_zone field
loc = Location.objects.get(pk=1) #get existing location or your object that has time_zone field
utc = pytz.utc
some_utc_date = datetime.datetime(2002, 10, 27, 6, 0, 0).replace(tzinfo=utc) #tz aware
some_date.astimezone(timezone(loc.time_zone))
Thay datetime.datetime (2002, 10, 27, 6, 0, 0) với lĩnh vực datetime tương ứng với vị trí của bạn hoặc đối tượng cụ thể có trường time_zone. Trong trường hợp của tôi, tôi lưu trữ tất cả các trường ngày tháng của tôi theo định dạng UTC trong một bộ sưu tập MongoDB. Khi tôi lấy dữ liệu và muốn tạo đầu ra có thể đọc được của con người, tôi sử dụng phương thức trên để hiển thị ngày trong đầu ra. Bạn cũng có thể tạo thẻ tùy chỉnh để xử lý thẻ này trong các mẫu. Xem tài liệu pytz để biết thêm chi tiết.
Tôi muốn tiến hành với ứng dụng của tôi ở một nơi nào đó khi anh/cô ấy chạy ứng dụng này phải có pytz trong môi trường đang chạy của nó? –