Study_microblog笔记Part 13--日期与时间

UTC是最常用的统一时区,并且在datetime类中也受到支持,因此在系统会使用UTC时区时间。从服务器的角度来说,将时间戳标准化为UTC,意义重大,但这会为用户带来可用性问题。 对处于不同时区的用户,如果他们看到的是UTC时区中的时间,那么很难确定是何时发布的信息。 他们需要事先知道展示的时间是UTC时区的,才能在精神上调整自己的时区。

时区转换

解决方案是将所有时间戳从存储的UTC单位转换为每个用户的本地时间。 这样一来,服务器可以继续使用UTC来保持时区的一致性,而针对每个用户量身定制的即时转换来解决可用性问题。 这个解决方案棘手的部分是要知道每个用户的位置。

Moment.js和Flask-Moment简介

Moment.js是一个小型的JavaScript开源库,它将日期和时间转换成目前可以想象到的所有格式。 Flask-Moment,一个小型Flask插件,它可以使你在应用中轻松使用moment.js。

安装Flask_moment:

(microblog) D:\pythonProgram\PycharmProjects\microblog>pip install flask_moment
Collecting flask_moment
  Downloading Flask_Moment-1.0.2-py3-none-any.whl (5.7 kB)
Requirement already satisfied: Flask in d:\pycharmprojects\flask\microblog\lib\site-packages (from flask_moment) (2.0.1)
Requirement already satisfied: itsdangerous>=2.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask_moment) (2.0.1)
Requirement already satisfied: Jinja2>=3.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask_moment) (3.0.1)
Requirement already satisfied: Werkzeug>=2.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask_moment) (2.0.1)
Requirement already satisfied: click>=7.1.2 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Flask->flask_moment) (8.0.1)
Requirement already satisfied: colorama in d:\pycharmprojects\flask\microblog\lib\site-packages (from click>=7.1.2->Flask->flask_moment) (0.4.4)
Requirement already satisfied: MarkupSafe>=2.0 in d:\pycharmprojects\flask\microblog\lib\site-packages (from Jinja2>=3.0->Flask->flask_moment) (2.0.1)
Installing collected packages: flask-moment
Successfully installed flask-moment-1.0.2

添加该插件到Flask应用中:
app/init.py:Flask-Moment实例:

# ...
from flask_moment import Moment

app = Flask(__name__)
# ...
moment = Moment(app)

应用的所有模板都必须包含moment.js。 最直接的方法是显式添加一个</script/>标签来引入库,但Flask-Moment的moment.include_moment()函数可以更容易地实现它,它直接生成了一个</script/>标签并在其中包含moment.js:

app/templates/base.html:

...

{% block scripts %}
    {{ super() }}
    {{ moment.include_moment() }}
{% endblock %}

使用Moment.js

看看出现在个人主页中的时间戳。 当前的user.html模板使用Python生成时间的字符串表示。 现在我可以使用Flask-Moment渲染此时间戳,如下所示:
app/templates/user.html: 使用moment.js渲染时间戳。

  {% if user.last_seen %}
       <p>Last seen on: {{ moment(user.last_seen).format('LLL') }}</p>
  {% endif %}

moment对象为不同的渲染选项提供了几种方法。 以下是一些最常见的几种:

moment('2017-09-28T21:45:23Z').format('L')
"09/28/2017"
moment('2017-09-28T21:45:23Z').format('LL')
"September 28, 2017"
moment('2017-09-28T21:45:23Z').format('LLL')
"September 28, 2017 2:45 PM"
moment('2017-09-28T21:45:23Z').format('LLLL')
"Thursday, September 28, 2017 2:45 PM"
moment('2017-09-28T21:45:23Z').format('dddd')
"Thursday"
moment('2017-09-28T21:45:23Z').fromNow()
"7 hours ago"
moment('2017-09-28T21:45:23Z').calendar()
"Today at 2:45 PM"

在主页和个人主页调用的_post.html子模板添加一个用fromNow()渲染的时间戳:app/templates/_post.html: 在用户动态子模板中渲染时间戳。

 <a href="{{ url_for('user', username=post.author.username) }}">
     {{ post.author.username }}
 </a>
 said {{ moment(post.timestamp).fromNow() }}:
 <br> {{ post.body }}

可以看一下表现如何!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值