Django实用攻略(一)时间戳及时间格式化

Django接触了一段时间,总算写出了一个比较完整的博客。对于常年混迹于Java开发的我,着实遇到一些麻烦。

Django接触了一段时间,总算写出了一个比较完整的博客。对于常年混迹于Java开发的我,着实遇到一些麻烦。

Django第一篇,先说一下学习中,我最初遇到的问题。

时间戳

没错,就是时间戳。实在不能理解为什么百度搜索“python时间戳”,出现通篇讲date、time1、datetime区别的文。我最关心的,只有“时间戳的获取、及格式化”。

1、时间戳的获取

import time

timestamp = time.time()

到这里就结束了?是的就是这样。如果只是记录时间戳,到这里就可以了。 But,我们需要输出格式化的时间~

2、时间的格式化

在处理时间之前,一定要setting中设置时区,划重点!!

打开setting.py,找到TIME_ZONE,设置如下:

TIME_ZONE = 'Asia/Shanghai'

留学的高材生们,请自行搜索对应地区代码。

接下来就是格式化输出了。我习惯是在数据库存储时间戳,在需要的地方转换成时间字符串使用。这样处理时间在各种语言开发中都比较常见。

2.1、时间戳转time

将long类型的时间戳timestamp赋值给time

import time

time.localtime(timestamp)

时间戳为字符串,记得先转换一下long(timestamp)

2.2、格式化输出time

时间格式化使用的是time模块内部函数strftime:

import time

timestr = time.strftime('%Y-%m-%d',time.localtime(timestamp))

%Y、%m、%d分别代表年月日,常用指令如下:

%Y: 年份,如2018 %m: 月份,如01 %d: 代表在月份中的哪一天[01-31] %H: 小时,24小时制 %M: 分钟[0-59] %S: 秒[00,61],啥玩意61?没错,官方文档解释是可以支持闰秒60的显示,由于不知名的历史原因,61也支持。

为什么觉得坑呢,因为我们亲爱的sdf常用格式化字符串是“yyyy-MM-dd HH:mm:ss”。看来开发者是C++出身,延用了部分C风格。

完整的格式化指令参考这里

到这里,还没有结束,上面只是python的处理方式。Django还有自己的过滤器,用于在页面中格式化显示时间。

3、date filter

Django在模版层可以使用filter来控制数据的显示。其中date用来格式化datetime等日期类型的数据。模板可能随时都会替换,较为良好的时间处理方式,是将要显示的日期对象传给模板,在模板层控制具体的表现。 直接上代码:

{{ datetime|date:"Y-m-d H:i:s" }}

你说上面的i是什么玩意?m、s怎么小写了?我怎么知道Django设计者怎么想的。总之这里与python的不同,常用的在上面的代码中应该也能看出来,这里就不说了。有趣的是s这里官方给出的范围是'00'-'59',比较传统了。感觉同一个日期python和django输出,会相差那么几秒。

date过滤器的指令还有很多,请参考这里

这一篇就讲到这里,有不足的地方请不吝赐教。


  1. time 是一个最常用的模块,用于时间的访问和转换。想详细了解time的方法和参数,点这里查看官方文档


作者

NewImaging
  • Shadust
  • 有你,真好~

评论