【问题标题】:Showing time according to User's Country根据用户所在国家/地区显示时间
【发布时间】:2021-07-12 00:53:40
【问题描述】:

我正在构建一个 BlogApp,但遇到了一个问题。

我想问什么:-

众所周知,Django provides Time Zone 在settings.py 中选择功能喜欢

TIME_ZONE = 'Asia/Sanghai'

我已经做了一个实例

date = models.DateTimeField(auto_now_add=True)

与

date_added = models.DateTimeField(null=True,default=timezone.now) 在 models.py

所以我的时间是在亚洲,每当我部署我的 web 应用程序和来自 Europe 的用户尝试访问 web 应用程序并尝试创建博客帖子时,Europe's User 的时间是什么时候?

  • 我选择的时间(亚洲/桑海)?

  • OR `欧洲的用户时间?

如果他/她的时间是My selected time,那么我该怎么做:当有人访问该网站时,根据用户的时区显示时间?

我不知道,当有人尝试从不同的Country 访问该网站时,时区是什么时候。

任何帮助将不胜感激。提前谢谢你。

【问题讨论】:

  • 这能回答你的问题吗? Determine a user's timezone
  • 没有。我的问题不同,我说的是default setting,明白了吗?
  • 服务器没有默认方式来确定客户端的时区。对于所有客户端,它将是服务器本身的时区。如果您想为用户显示本地时间,您可能需要使用 javascript 来获取时区偏移量,或者要求用户选择他们的时区并将其存储在服务器上。上面的链接有更多详细信息。
  • 那么如果是美国用户,那么 tim 会自动设置吗?
  • 简单的解决方案是在用户注册到您的站点时向他/她提供相关国家/地区的时区列表。用户选择国家/地区后,您可以将其存储在他们的个人资料中,并通过将所选时区提供给 pytz 模块来相应地计算时区。

标签: python django timezone


【解决方案1】:

您可以在用户注册到您的网站时将时区列表从后端返回给用户,并将所选时区存储在他们的个人资料中,如下所示:

from django.shortcuts import render
import pytz

class RegisterView(View):

    def get(self, request):
        # view code
        return render(request, 'signup.html', {
            'country_list': pytz.all_timezones
        })

    def post(self, request):
        timezone = request.POST.get('selected_timezone')
        profile = Profile(timezone=timezone, ...)
        profile.save()

您可以在给定时区的情况下获得特定时间,如下所示:

from datetime import datetime
import pytz

tz = pytz.timezone('Europe/Berlin')
berlin_now = datetime.now(tz)

【讨论】:

  • 非常感谢您的帮助。但是Profile Model's country choicefield 在哪里?
猜你喜欢
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多