flask:将utc时间转换为用户的当地时间
我试图将UTC时间转换为烧瓶应用程序中的相应本地时间。我想知道如果我可以检测用户的时区并动态设置它。flask:将utc时间转换为用户的当地时间
这是到目前为止我的代码,其适合于所有人的US/Pacific时区唯一的(从this SO question拉datetimefilter)
from flask import Flask, render_template_string import datetime 
import pytz 
app = Flask(__name__) 
@app.template_filter('datetimefilter') 
def datetimefilter(value, format='%b %d %I:%M %p'): 
    tz = pytz.timezone('US/Pacific') # timezone you want to convert to from UTC (America/Los_Angeles) 
    utc = pytz.timezone('UTC') 
    value = utc.localize(value, is_dst=None).astimezone(pytz.utc) 
    local_dt = value.astimezone(tz) 
    return local_dt.strftime(format) 
@app.route('/') 
def index(): 
    dt = datetime.datetime.utcnow() 
    return render_template_string(
     ''' 
     <h4>UTC --> Local Time</h4> 
     Datetime right now is: 
     <p>{{ dt | datetimefilter }} (utc --> local)</p> 
     ''', 
     dt=dt, now=now) 
if __name__ == '__main__': 
    app.run(debug=True) 
我想这不能处理的服务器端,因为时区将始终被设置到服务器所在的位置?有没有办法通过改变datetimefilter来解决这个问题?
回答:
如果要动态检测用户在网站上的本地时间,最简单的方法是通过JavaScript Date()对象获取浏览器的日期时间。这样,您可以显示正确的本地时间,而不必检测字面意义上的任何内容。您的片段可能会是这样的:
@app.route('/') def index(): 
    dt = datetime.datetime.utcnow() 
    return render_template_string(
     ''' 
     <html><body> 
     <h4>UTC --> Local Time</h4> 
     Datetime right now is: 
     <p>{{ dt | datetimefilter }} (utc)</p> 
     <p><span id="timeNow"></span> (local)</p> 
     <script> 
     var elem = document.getElementById("timeNow") 
     var now = new Date(); 
     var options = { month: 'short', day: '2-digit', 
         hour: 'numeric', minute: '2-digit' }; 
     elem.innerHTML = now.toLocaleString('en-us', options); 
     </script> 
     </body></html> 
     ''', 
     dt=dt) 
而且它会使下面的结果,这取决于用户的本地时间:
UTC --> Local Time Datetime right now is: 
Dec 02 06:20 PM (utc) 
Dec 03, 4:20 PM (local) 
然后,如果您需要保存或处理一些数据,根据用户的当地时间,您可以添加另一个@ app.route(with POST-method),从网站的前端接收Date()值via AJAX。
当接收到后端侧,你可能想to parse JavaScript的日期()对象(注意,在这种情况下,最好使用纯getTime()方法,而不是toLocaleString()格式)转换成Python的datetime,验证它通过如webargs /棉花糖,并保存在,比如用户的session。
请注意类似的问题已经提前been answered。
以上是 flask:将utc时间转换为用户的当地时间 的全部内容, 来源链接: utcz.com/qa/258888.html






