datetime的基本操作

python中的datetime模块提供了操作日期和时间功能,是time模块的超集, 该模块提供了五种核心对象:datetime(时间日期类型), date(日期类型), time(时间类型), timedelta(时间差类型),tzinfo(时区类型,暂不介绍)


datetime 对象

datetime对象可以用来表示精确的日期和时间,最常用的就是这个,常用的方法如下

from datetime import datetime
# 实例对象
print(datetime(year=2020, month=6, day=1, hour=12, minute=0, second=0))

# 获取当前系统时间,精确到微秒
now_time = datetime.now()
print(now_time)

# 转换成时间戳,类型是float
now_timestamp = now_time.timestamp()
print(now_timestamp)

在实例化datetime对象时,year, month, day是必填项,hour, minute, second, microsecond(微秒), tzinfo(时区)是可选项

当hour,minute,second,microsecond缺省时,默认都是0,tzinfo缺省时,默认时None

datetime可以用其属性year,month等获取某个时间数据

from datetime import datetime
# 实例对象
datetime1 = datetime(year=2020, month=6, day=1)
# 获取年份,类型是int
print(datetime1.year)
# 获取小时
print(datetime1.hour)

datetime.timestamp方法,可以将datetime对象转换为时间戳

datetime.replace方法,可以将datetime对象中的某个/些值替换,来生成一个新的datetime对象

datetime.utcnow方法,可以获取现在的UTC时间


和str之间的转换

  1. strftime:使用strftime可以将datetime类型转化为指定的字符串格式,需要使用格式符来指定格式,注意:,这个函数不支持中文,所以可以先用占位符替代中文,转换成字符串后,再利用format将占位符变为中文字符
  2. strptime:strptime可以将字符串按照特定的格式解析为datetime对象,这个支持中文
    第一个参数是字符串
    第二个参数是格式
  3. str:直接使用强制类型转换,可以将其转换为YYYY-MM-DD HH:MM:SS.mmmmmm格式
from datetime import datetime
# 实例对象
now_datetime = datetime.now()

# 转换成指定格式,不支持中文
str_datetime = now_datetime.strftime('%Y{}%m{}%d{}  %H{}%M{}%S{}%f{} %a').format('年','月','日','时','分','秒','毫秒')
print(str_datetime)

# 将字符串转换为datetime,第一个参数指定字符串,第二个指定格式
now_datetime = datetime.strptime(str_datetime, '%Y年%m月%d日  %H时%M分%S秒%f毫秒 %a')
print(now_datetime)

# 转换为YYYY-MM-DD HH:MM:SS.mmmmmm格式
print(datetime.isoformat(now_datetime))

常用时间格式符

格式符

说明

%Y

四个数字表示的年份 2015

%m

返回月份 范围[0,12]

%d

返回的是当前时间是当前月的第几天

%H

以24小时制表示当前小时

%M

返回分钟数 范围 [0,59]

%S

返回秒数 范围 [0,61]。。。手册说明的

%f

微秒的表示: 范围: [0,999999]

%a

星期的英文单词的缩写:如星期一, 则返回 Mon

详细格式符如下

格式符

说明

%a

星期的英文单词的缩写:如星期一, 则返回 Mon

%A

星期的英文单词的全拼:如星期一,返回 Monday

%b

月份的英文单词的缩写:如一月, 则返回 Jan

%B

月份的引文单词的缩写:如一月, 则返回 January

%c

返回datetime的字符串表示,如03/08/15 23:01:26

%d

返回的是当前时间是当前月的第几天

%f

微秒的表示: 范围: [0,999999]

%H

以24小时制表示当前小时

%I

以12小时制表示当前小时

%j

返回 当天是当年的第几天 范围[001,366]

%m

返回月份 范围[0,12]

%M

返回分钟数 范围 [0,59]

%P

返回是上午还是下午–AM or PM

%S

返回秒数 范围 [0,61]。。。手册说明的

%U

返回当周是当年的第几周 以周日为第一天

%W

返回当周是当年的第几周 以周一为第一天

%w

当天在当周的天数,范围为[0, 6],6表示星期天

%x

日期的字符串表示 :03/08/15

%X

时间的字符串表示 :23:22:08

%y

两个数字表示的年份 15

%Y

四个数字表示的年份 2015

%z

与utc时间的间隔 (如果是本地时间,返回空字符串)

%Z

时区名称(如果是本地时间,返回空字符串)


date 对象

date对象和datetime对象的区别在于,date对象只能表示日期,不能表示时间(即其精确度为天)。date实例化时须要且仅须要三个参数:year, month, day。date对象是没有时区(tzinfo)属性的。

from datetime import date, datetime
# 实例对象,获取今天的日期
now_date = date.today()
print(now_date)
# 将datetime转换为date
now_date = datetime.now().date()
print(now_date)

time对象

和date对象相反,time对象只能用来表示时间,而不能用来表示日期。time对象所表示的时间可以精确到微秒,而且可以具有时区(tzinfo)属性。

from datetime import datetime,time
# 实例对象
# hours, minute, second,microsecond, tzinfo都是可选参
time1 = time(hour=1,minute=10,second=30)
print(time1)

# 获取当前的时间,转换为time
now_time = datetime.now().time()
print(now_time)

这里要注意,python中还有另外一个模块我们经常用到的模块:time,这个模块也含有用来表示时间、日期对象的函数,但因为该模块下的函数都是对同名C函数的直接调用,所以返回的对象都不太pythonic,所以我们一般不用,经常使用的就两个函数:time.sleep()time.time()

import time
print(time.time()) #返回当前时间戳(s)
time.sleep(5)
print(time.time())  # 程序进入睡眠5s

timedelta对象

timedelta对象表示一个时间段,timedelta对象可以通过手动实例化得到,也可以通过上述三个对象(datetime, date, time)相减得到。

通常用于时间的加减计算

from datetime import datetime, timedelta
import time
now_datetime = datetime.now()
# 365天的时间段
delta = timedelta(days=365)
# 365天后的时间
print(now_datetime+delta)


# 计算两个时间的差值
time.sleep(5)
delta = datetime.now()-now_datetime
print(delta)

手动实例化timedelta时,可以传入的参数有:days, seconds, microseconds, milliseconds, minutes, hours, weeks。