В настоящее время в моих настройках установлен TIME_ZONE = 'UTC'.

В моем поле DebitCard model expiration_date я храню дату как unixtime. Например, 10.01.2020 в 23:25 (UTC): 1578698708.

Проблема в:

Допустим, expiration_date - 15 января 2010 г., 00:00 или (1263513600).

Я хочу запретить пользователям совершать транзакции, когда текущее время больше, чем expiration_date .

Однако, если пользователь находится в Лос-Анджелесе (за 8 часов до UTC), current_time будет отключено на 8 часов.

Вопрос:

Как мне узнать текущее время пользователя, где бы он ни был (не только в Лос-Анджелесе)? Потому что я хочу взять этот раз и сравнить его с их дебетовой картой expiration_date

0
Anthony 11 Янв 2020 в 02:51
Насколько я понимаю, когда ваш сервер получит запрос, будет метка времени, просто сравните ее с expiration_date, и вам не обязательно знать часовой пояс пользователя.
 – 
tikael
11 Янв 2020 в 03:05

2 ответа

Попробуй это.

from django.contrib.gis.utils import GeoIP
from .utils import GeoTimeZoneReader


  g = GeoIP()  # get user ip
  g.city(request.META['REMOTE_ADDR'])
  g.city('74.125.79.147') # get city 
to get timezone 

  data = GeoIP().city('74.125.79.147')

  # Get Time Zone
  db = GeoTimeZoneReader()
  db.get_timezone(data['country_code'], data['region'])
2
Gorkhali Khadka 11 Янв 2020 в 03:49

Если вы хотите быть уверены, что ваш код использует время UTC для сравнения, используйте datetime.datetime.utcnow()

Например, попробуйте запустить на python или в оболочке manage.py следующее:

import datetime
print(datetime.datetime.utcnow())

Вы можете сравнить результат этого с простым datetime.datetime.now(). Если используемый вами компьютер не находится в формате UTC, now () и utcnow () будут другими.

0
d35348w 11 Янв 2020 в 03:33