在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的使用和转换的更多相关文章

  1. django中navie时间和aware时间详解

    navie时间和aware时间: 什么是navie时间?什么是aware时间? navie时间:不知道自己的时间表示的是哪个时区的.也就是不知道自己几斤几两.比较幼稚. aware时间:知道自己的时间 ...

  2. Django中ORM模板常用属性讲解

    学习了ORM模板中常用的字段以及使用方法,具体如下: from django.db import models # Create your models here. # 如果要将一个普通的类映射到数据 ...

  3. 一篇文章解决django中时区问题

    首先要明确的是,当在Django项目的setting.py文件中设置了USE_TZ=True时,我们给定的时间存储到数据库的时候都会变成UTC时间(使用auto_now_add和auto_now为Tr ...

  4. django中的时区问题

    在django中设置时区,通过setting文件中的: TIME_ZONE = 'Asia/Shanghai' 开起多时区支持功能:USE_TZ=True 这时在数据库中插入的时间为UTC时间,当调用 ...

  5. Django 中的时区

    Django 中的时区 在现实环境中,存在有多个时区.用户之间很有可能存在于不同的时区,并且许多国家都拥有自己的一套夏令时系统.所以如果网站面向的是多个时区用户,只以当前时间为标准开发,便会在时间计算 ...

  6. 异步任务队列Celery在Django中的使用

    前段时间在Django Web平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务.在同事的指引下接触了Celery这个异步任务队 ...

  7. Mysql事务探索及其在Django中的实践(二)

    继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...

  8. Mysql事务探索及其在Django中的实践(一)

    前言 很早就有想开始写博客的想法,一方面是对自己近期所学知识的一些总结.沉淀,方便以后对过去的知识进行梳理.追溯,一方面也希望能通过博客来认识更多相同技术圈的朋友.所幸近期通过了博客园的申请,那么今天 ...

  9. Django 中url补充以及模板继承

    Django中的URL补充 默认值 在url写路由关系的时候可以传递默认参数,如下: url(r'^index/', views.index,{"name":"root& ...

随机推荐

  1. 选题Scrum立会报告+燃尽图 03

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8680 组长:杨天宇 组员:魏新,罗杨美慧,王歆瑶,徐丽君 组名:组长 第 ...

  2. 关于SAM和广义SAM

    关于SAM和广义SAM 不是教程 某些思考先记下来 SAM 终于学会了这个东西诶...... 一部分重要性质 确定一个重要事情,S构造出的SAM的一个重要性质是当且仅当对于S的任意一个后缀,可以从1号 ...

  3. 关于有向图走“无限次”后求概率/期望的口胡/【题解】HNCPC2019H 有向图

    关于有向图走"无限次"后求概率/期望的口胡/[题解]HNCPC2019H 有向图 全是口胡 假了不管 讨论的都是图\(G=(V,E),|V|=n,|E|=m\)上的情况 " ...

  4. win10纯净版安装及其常用软件集锦(2020新年湘岳阳万江波整理)

    win10纯净版安装及其常用软件集锦 1.安装win10纯净版:链接:https://pan.baidu.com/s/1L9yl-LNxxDQbEN_TGswzcA 提取码:u0pt 2.安装WPS2 ...

  5. 1071 小赌怡情 (15分)C语言

    常言道"小赌怡情".这是一个很简单的小游戏:首先由计算机给出第一个整数:然后玩家下注赌第二个整数将会比第一个数大还是小:玩家下注 t 个筹码后,计算机给出第二个数.若玩家猜对了,则 ...

  6. Python 植物大战僵尸代码实现: 图片加载和显示切换

    游戏介绍以前很火的植物大战僵尸游戏, 本想在网上找个python版本游戏学习下,无奈没有发现比较完整的,那就自己来写一个把.图片资源是从github上下载的,因为图片资源有限,只能实现几种植物和僵尸. ...

  7. 06_URL参数截取

    1:如何获取URL传给子页面的参数: //获得参数(只对字母数字等有效,参数值为中文则不能传) function getQueryString(name) { var reg = new RegExp ...

  8. Redis 高可用之"持久化"

    Redis高可用概述 在Redis中,实现高可用的技术主要包括:持久化.复制(读写分离).哨兵.集群. 持久化: 持久化是最简单的高可用方法(有时甚至不被归为高可用手段),主要作用是数据备份,即将数据 ...

  9. ip转十进制(PHP、MySQL)

    mysql与php中都提供了IP转换十进制数函数 1. IP 由点分格式,转换为数字格式,代码如下: mysql> select inet_aton('127.0.0.1'); +------- ...

  10. TensorFlow——tf.contrib.layers库中的相关API

    在TensorFlow中封装好了一个高级库,tf.contrib.layers库封装了很多的函数,使用这个高级库来开发将会提高效率,卷积函数使用tf.contrib.layers.conv2d,池化函 ...