## 时间
在动画片哆啦A梦里,有一集机器猫发明了时间机器。通过这个机器,可以在过去、现在、未来中穿梭,十分神奇。
![](http://n.sinaimg.cn/transform/20150831/MDlg-fxhkafa9462264.jpg)
这节课,我们学习一下用python怎么操作时间,显示过去、现在、未来的时刻。
## 时间组成
![](https://images2015.cnblogs.com/blog/482495/201509/482495-20150917154048492-1434774034.png)
我们知道时间是由 年月日时分秒来组成的,比如这个时间:`2018-08-28 13:56:10`。为了让我们的时间能够比较清楚的显示,我们需要约定一个固定的格式显示时间。比如我们举的例子里,8月份虽然只占了一位,但是为了表示清楚,我们用08来严格固定月份的位置。
这样我们的时间就可以用:`年年年年-月月-日日 时时-分分-秒秒`来组成了,我们经常会有英文的缩写来表达:`YYYY-mm-dd HH:MM:SS`。
## 时间操作
那我们对时间能做哪些操作呢?
1. **定义一个时间**
2. **将时间按照某个格式输出**
3. **更改一个时间的天、小时等**
4. **比较时间大小**
我们来看看用python怎么实现这些操作!
## python的时间定义
1. 获取当前时间
~~~
from datetime import datetime
now = datetime.now()
print('now =', now)
~~~
注意看我们打印的结果:year-month-day hour:minute:second.microsecond
2. 定义一个指定时间的日期
~~~
dt = datetime(2015, 4, 19, 12, 20)
print('dt =', dt)
~~~
我们通过调用datetime函数,函数参数分别传入:年、月、日、时、分、秒来定义一个指定的时间。(后面的部分不传代表零分零秒等)
## 获取时间信息
1. 获取时分秒
datetime获取的时间会返回一个时间对象,我们可以从里面获取对应的:年、月、日、时、分、秒;只需要调用对应的:`now.year now.month now.day now.hour now.minute now.second` 即可。
2. datetime的日期部分和时间部分
我们知道,一个具体的时间包括:年月日的日期和时分秒的时间。这个用python里的:date、time 两个对象来表示。
~~~
print(dt.date())
print(dt.time())
~~~
3. 增加时间 减少时间
我们如果想让时间前进一天或者后退一小时,可以使用 `timedelta` 模块。先看代码:
~~~
from datetime import datetime, timedelta
cday = datetime.now()
print('current datetime =', cday)
print('current + 10 hours =', cday + timedelta(hours=10))
print('current - 1 day =', cday - timedelta(days=1))
print('current + 2.5 days =', cday + timedelta(days=2, hours=12))
~~~
我们可以直接使用类似数学加减的方式来增加时间和减少时间。注意timedelta方法的参数,因为我们可以更改的部分很多(年月日时分秒),所以我们可以使用指定参数名的方式只填入要更改的部分。
## 显示日期
日期的显示方式有很多,比如:`2018-08-28 13:56:10`、`2018年08月28日13点56分10秒`、`08月28日13点` 。在python里,可以使用datetime的strftime函数来格式化一个时间,看代码:
~~~
cday = datetime.now()
print('strftime:', cday.strftime('%a, %b %d %H:%M'))
~~~
程序会输出:`strftime: Mon, Jun 01 18:19`
strftime方法里传入的参数就是我们想要让日期展示的样子。`%a, %b %d %H:%M`是日期的格式化字符。完整的格式化信息如下:
*%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称*
## 时间戳?
我们知道,python里有只有数字和字符串两种基础类型,那像这种年月日时分秒的日期是怎么表示的呢?
python和其他大多数编程语言一样,用一个数字来代表时间。数字时间精确到毫秒。0就代表 1970年1月1日 00:00:00。我们怎么从一个数字构建一个日期呢?看代码:
~~~
from datetime import datetime
# 把timestamp转换为datetime:
date = datetime.fromtimestamp(1535455200)
print(date)
# 把datetime转换为timestamp:
print(date.timestamp())
~~~
用`timestamp`函数获取日期对应的时间戳。
用`fromtimestamp`函数从时间戳获取时间;
python对日期处理的函数较多,我们可以按照自己想做的事情找对应的方法,不应死记硬背每个函数。
## 小灶时间 为啥是1970年?
![](https://ituonline.com/wp-content/uploads/2017/06/unix.jpg)
在讲时间戳的时候,我们说0代表的时间是: 1970年1月1日 00:00:00,这是电脑的unix系统(linux、osx系统的前身)在发布的时候定义的起始时间。这个时间也叫做纪元时间(epoch time)。
**阿达老师-孩子身边的编程专家**
- 课程介绍
- 搭建环境
- 什么是计算机
- 程序是怎么运行的
- 安装python
- 项目实例-安装IDE
- 变量和简单数据类型
- 数据&变量
- 数字
- 字符串
- 布尔类型
- 项目实例
- 容器-列表
- 容器
- 列表
- 项目实例
- 容器-字典
- 定义字典
- 项目实例
- 数据类型总结
- 条件语句
- python条件语句
- 项目实例
- 循环语句
- for循环
- while循环
- 项目实例
- 函数
- 5.0函数定义
- 5.2函数实战
- 6.文件系统
- 6.1 文件系统介绍&python查找文件
- 6.2 用python读写文件
- 7. python操作时间
- 8.面向对象
- 8.1 类和对象
- 8.2 继承和重写
- 8.3 面向对象项目实战
- 9 GUI编程
- 9.1 GUI基础
- 9.2 备忘清单GUI版
- 10.网络
- 10.1 网络的发展
- 10.2 python http
- 11.web开发
- 11.1 web基础&HTML
- 11.2 CSS&JavaScript
- 11.3 网页计算器
- 11.3 网站开发实战-播客搭建
- 11.3 python-web
- 12. 项目实战-数据处理
- 13. 项目实战-AI入门
- 13.1 环境搭建
- 心得
- 13.2 Tensorflow的瓜怎么吃
- 14 pygame
- 14.1 pygame Helloworld
- 14.4 pygame 动画基础 Animation
- 从0开始学python第14.5节 pygame 加载图片和声音
- 从0开始学python第14.6节 pygame.sprite(上)
- 14.7 pygame.sprite模块(下)
- 14.8 pygame射击游戏(一)
- pygame射击游戏(二)
- 14.8 pygame射击游戏(三)
- 14.8 pygame射击游戏(四)
- 14.8 pygame射击游戏(五)