datetime 模块学习

项目开发中,必不可少要解决日期的选择问题。所以花了些时间学习了 datetime 模块。
datetime 模块分成三个大部分, 其中:
1. datetime.date : date 部分只含有年 月 日信息。
2. datetime.time : time 部分只含有时 分 秒 微秒。
3. datetime.datetime : datetime 部分包含 date 和 time 两部分, 也就是包含年 月 日 时 分 秒 微秒。

一.datetime.date

1.1 创建自定义日期

注意:个位数的月和日前面不要加 0

import datetime
 
d = datetime.date(2019,4,1)
print(d)
2019-04-01

1.2 获取本地时间

tday = datetime.date.today()
print(tday)
2019-04-01

分别获取本地时间的年,月,日,周

print(tday.year)# 获取年
2019
print(tday.month)# 获取月
4
print(tday.day)# 获取日
4
print(tday.weekday())# 获取星期几,0-6代表周一到周天
0
print(tday.isoweekday())# 获取星期几,1-7代表周一到周天
1

1.3 datetime.timedelta 方法可以对时间进行运算操作

datetime.date 对象 = datetime.date 对象 ± datetime.timedelta 对象

计算明天日期 

import datetime
# 获得本地日期
tday = datetime.date.today()
# 定义操作时间 day=7 也就是可以对另一个时间对象加7天或者减少7点
tdelta = datetime.timedelta(days=7)
 
# 打印今天的日期
print('今天的日期:{}'.format(tday))
# 打印七天后的日期
print('从今天向前推7天:{}'.format(tday + tdelta))
 
今天的日期:2019-04-01
从今天向前推7天:2019-04-08

也可以直接从 datetime 里导入 datetime 和 timedelta 来操作

from datetime import datetime
from datetime import timedelta
 
now = datetime.now()
aDay = timedelta(days=1)      #主要控制days这个参数计算日期
now = now + aDay  
print(now.strftime('%Y-%m-%d'))  #转换时间格式
 
2019-04-02
 
now = datetime.now()
aDay = timedelta(days=-1)  #计算昨天日期
now = now + aDay
print(now.strftime('%Y-%m-%d'))
 
2019-03-31

1.4 计算某日离今日有多少天

 
bday = datetime.date(2001,1,24)  #开始日期
 
tday = datetime.date.today()  # 今天的日期
 
days = bday - tday
print('开始日期:{}'.format(bday))
print('今天的日期:{}'.format(tday))
print('隔了{}'.format(days))
 
开始日期:2001-01-24
今天的日期:2019-04-01
隔了-6641 days, 0:00:00

 二.datetime.time

t = datetime.time(9, 30, 45, 100000)
print(t)
09:30:45.100000

分别获取 datetime.time 对象的 小时 分钟 秒 微秒

print(t.hour)
print(t.minute)
print(t.second)
print(t.microsecond)
9
30
45
100000

三.datetime.datetime

如果我们想用 年 月 日 小时 分钟 秒 微秒这样的日期时间, 这时候就需要 datetime.datetime 对象出场啦

import datetime
dt = datetime.datetime(2016, 7, 26, 12, 30, 45, 100000)
print(dt)
2018-07-26 12:30:45.100000
 
print(dt.date())  #获得datetime.date对象
2018-07-26
print(dt.time())  获得datetime.time对象
12:30:45.100000
 
# 等价于
from datetime import datetime
dt = datetime(2018, 7, 26, 12, 30, 45, 100000)
print(dt)
2018-07-26 12:30:45.100000
print(dt.date())  #获得datetime.date对象
2018-07-26
print(dt.time())  获得datetime.time对象
12:30:45.100000

datetime.datetime 对象遵循着之前的运算法则

datetime.timedelta对象 = datetime.datetime对象 ± datetime.datetime对象

import datetime
 
dt = datetime.datetime(2018, 9, 7, 21, 28, 45, 100000)
 
tdelta = datetime.timedelta(days=12)
 
print(dt + tdelta)
 
2018-09-19 21:28:45.100000

四.datetime.strptime()和 datetime.strftime()

datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类

你也可以直接 import datetime。不过后面要用 datetime.datetime(), 这个前面提到过。

strptime() : 用户输入的日期和时间是字符串,要处理日期和时间,首先必须把 str 转换为 datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

from datetime import datetime
dt = '2018-8-1 18:20:20'
cday = datetime.strptime(dt, '%Y-%m-%d %H:%M:%S')
print(cday)
 
2018-08-01 18:20:20

strftime() : 后台提取到 datetime 对象后,要把它格式化为字符串显示给用户,就需要转换为 str,转换方法是通过strftime()实现的,同样需要一个日期和时间的格式化字符串:

from datetime import datetime
now = datetime.now()
print(now.strftime('%Y-%m-%d'))
2019-04-01

Strftime 需要的参数有很多,下面介绍一下最长用的一些参数: 
格式参数: 
%Y 带世纪部分的十制年份 
%m 十进制表示的月份 
%d 十进制表示的每月的第几天 
%H 24 小时制的小时 
%M 十时制表示的分钟数 
%S 十进制的秒数