django中navie time 和 aware time的使用和转换
在django中有关时间被分为navie time 和 aware time两种,前者指的是不带时区标记的时间格式,后者被认为是带有时区标记的时间格式。在django框架的setting.py文件中
LANGUAGE_CODE = 'en-us'
#TIME_ZONE 代表你所处的时区,刚创建时默认为‘UTC’即东0区(或西0区)
TIME_ZONE = 'Asia/shanghai' USE_I18N = True USE_L10N = True
#USE_TZ 为true代表使用带时区标记的aware时间格式
USE_TZ = True
在python中,默认将aware的时间设为UTC即东0区,
例如我们创建数据如下:
from django.shortcuts import render,reverse,redirect
from .models import Book
from django.utils.timezone import now,localtime def add_book(request):
if request.method=='GET':
return render(request,'add_books.html')
else:
title = request.POST.get("book_title")
author = request.POST.get("book_author")
price = request.POST.get("book_price")
book=Book(title=title,author=author,price=price,create_time=now())
book.save()
return redirect(reverse('index'))
在数据库中存储的时间为:
可以看到其实真实的时间要比这个时间晚八个小时,这是因为我们处在东八区,而django会把时间设置成东0区,为什么会变成东0区呢?
我们需要看一看
django.utils.timezone.now
这个函数
def now():
"""
Return an aware or naive datetime.datetime, depending on settings.USE_TZ.
"""
if settings.USE_TZ:
# timeit shows that datetime.now(tz=utc) is 24% slower
return datetime.utcnow().replace(tzinfo=utc)
else:
return datetime.now()
可以看到,通过django.utils.timezone.now函数,虽然我们调用了now函数,但这个函数实质上,先判断
USE_TZ值是否为true,如果为true就将date.now中的datetime转化成utc时区的时间,如果为false,就直接使用datetime这个时间,所以有两种解决办法:1、将
USE_TZ的值设置为false,2、先设置本地时区,然后通过localtime将东0区的时间转换成本地时区的时间。
我们推荐第二种做法,这是因为,第一种做法在不部署服务器时是可行的,在部署到服务器上使用linux操作系统时不可行的。
第二种的做法如下:
1.设置本地时区,在setting.py文件中设置本地时区为Asia/shanghai
TIME_ZONE = 'Asia/shanghai'
然后,在模板渲染时导入tz模块,使用tz模块中的localtime方法转化:
{% extends 'base.html' %}
{% load tz %}
{% block title %}
首页
{% endblock %}
{% block main %} <table>
<thead>
<tr>
<th>序号</th>
<th>书名</th>
<th>作者</th>
<th>价格(美元)</th>
<th>上架时间</th>
</tr> </thead>
<tbody>
{% for book in books %}
<tr>
<td>{{ book.title }}</td>
<td>{{ book.author }}</td>
<td>{{ book.price }}$</td>
<td>{{ book.create_time|localtime }}</td>
</tr>
{% endfor %} </tbody>
</table> {% endblock %}
最后在前端页面上展示的时间就是我们的东京时间了:
django中navie time 和 aware time的使用和转换的更多相关文章
- django中navie时间和aware时间详解
navie时间和aware时间: 什么是navie时间?什么是aware时间? navie时间:不知道自己的时间表示的是哪个时区的.也就是不知道自己几斤几两.比较幼稚. aware时间:知道自己的时间 ...
- Django中ORM模板常用属性讲解
学习了ORM模板中常用的字段以及使用方法,具体如下: from django.db import models # Create your models here. # 如果要将一个普通的类映射到数据 ...
- 一篇文章解决django中时区问题
首先要明确的是,当在Django项目的setting.py文件中设置了USE_TZ=True时,我们给定的时间存储到数据库的时候都会变成UTC时间(使用auto_now_add和auto_now为Tr ...
- django中的时区问题
在django中设置时区,通过setting文件中的: TIME_ZONE = 'Asia/Shanghai' 开起多时区支持功能:USE_TZ=True 这时在数据库中插入的时间为UTC时间,当调用 ...
- Django 中的时区
Django 中的时区 在现实环境中,存在有多个时区.用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统.所以如果网站面向的是多个时区用户,只以当前时间为标准开发,便会在时间计算 ...
- 异步任务队列Celery在Django中的使用
前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- Mysql事务探索及其在Django中的实践(一)
前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...
- Django 中url补充以及模板继承
Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...
随机推荐
- 1025 反转链表 (25 分)C语言
题目描述 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转.例如:给定L为1→2→3→4→5→6,K为3,则输出应该为 3→2→1→6→5→4:如果K为4,则输出应该为4→3→2→1→5 ...
- Python 超级玛丽代码实现:人物行走和碰撞检测
功能介绍 人物行走 人物的行走速度这边分成水平方向(X轴)和竖直方向(Y轴),水平方向的速度要考虑加速度和摩擦力,竖直方向的速度要考虑重力加速度. 水平方向:设定X轴向右走的速度为大于0,向左走的速度 ...
- docker-tmpfs挂载
使用tmpfs挂载 卷和绑定装置允许在主机和容器之间共享文件,以便即使在容器停止后也可以保留数据. 如果你在Linux上运行Docker,你有第三个选择:tmpfs mounts.使用tmpfs装载创 ...
- RabbitMQ安装(Windows)
一.下载安装 由于RabbitMQ是用Erlang语言编写的,因此需要先安装Erlang. 通过http://www.erlang.org/downloads获取对应安装文件进行安装 增加环境变量ER ...
- mysql 执行计划查看
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈.explain执行计划包含的信息 其中最重要的字段为:id ...
- Sample Code之Web scene-slides
这是我的第一篇随笔,在开始正文前说几句. 这个系列会记录我学习Arcgis js API 4.10的全过程,希望能对自己也对其他有需要的人有帮助.很多时候上网看一些大神的帖子会感到一头雾水,一是自己水 ...
- 使用Jenkins进行前端UVE项目部署
操作步骤 1.用 Jenkins 管理员账号下载 NodeJS Plugin 2.系统管理 ---> 全局工具配置 ---> NodeJS ---> 安装 ---> 自动安装 ...
- Nginx配置文件模板
主配置文件nginx.conf user nginx; #设置nginx服务的系统使用用户 worker_processes 1; #工作进程数(和cpu核心数保持一致) error_log /var ...
- redis 支持事务
pipe = conn.pipeline(transaction=True) pipe.multi() pipe.set(') pipe.hset('k3','n1',666) pipe.lpush( ...
- 7.JavaSE之类型转换
类型转换: 由于Java是强类型语言,所以要进行运算的时候,需要用到类型转换. 图中优先级从低到高,小数优先级大于整数. 运算中,不同类型的数据需要转换为同一类型,然后进行运算. 强制类型转换:(类型 ...