datetime模块


datetime 模块

格式符(下表以2016年1月13日下午5:00在美国/东部时区为例)

  • datetime模块中的date类
1.date.today():返回一个包含年月日的时间对象
from datetime import date
now=date.today()
print(now)#2021-04-01
#获取当前日期的年月日

2.strftime():格式化时间,将时间对象转化为字符串
from datetime import date
now=date.today()
print(now,type(now))#2021-04-01 
print(now.strftime('%Y-%m-%d'),type(now.strftime('%Y-%m-%d')))#2021-04-01 
#若要得到含中文字符的年月日的格式,则需要用到format()方法
print(now.strftime('%Y{}-%d{}-%m{}').format('年','月','日'))#2021年-01月-04日
                   
3.构造一个date对象,即自设定时间
from datetime import date
date1=date(2020,4,1)
print(date1.strftime('%Y{}-%d{}-%m{}').format('年','月','日'))#2020年-01月-04日
  • datetime模块中的datetime类
1.datetime.now():返回当前包含年月日时分秒的时间对象
from datetime import datetime
now=datetime.now()
print(now)#2021-04-01 19:23:52.323199

2.自定义时间
from datetime import datetime
settime=datetime(2021,3,20,12,12,12)
print(settime)#2021-03-20 12:12:12

2.strftime():时间对象格式化
from datetime import datetime
now=datetime.now()
print(now)#2021-04-01 19:27:51.256835
print(now.strftime('%Y{}%d{}%m{} %H{}%M{}%S{}').format('年','月','日','时','分','秒'))#2021年01月04日 19时27分51秒
print(now.strftime('%j  %A'))#091  Thursday (当前时间为这一年中的第91天,这周的星期三)

3.strptime():将时间格式的字符串转化为时间对象
(注:在进行字符串转datetime的时候,strptime()中格式必须和字符串保持一致,多一个空格都不行)
from datetime import datetime
strtime='2015/6/1 18:20:50'
print(datetime.strptime(strtime,'%Y/%m/%d %H:%M:%S'))#2015-06-01 18:20:50
strtime='2015-6-1'
print(datetime.strptime(strtime,'%Y-%m-%d %H'))#2015-06-01 00:00:00

4.时间戳:我们把1970年1月1日 00:00:00 UTC+00:00时区的时刻称为epoch time,记为0(1970年以前的时间timestamp为负数),当前时间就是相对于epoch time的秒数,称为timestamp,Python的timestamp是一个浮点数。
from datetime import datetime
timeSta=datetime.now().timestamp()
print(timeSta,type(timeSta))#1617277366.891051   输出从1970年1月1日到当前时间的秒数,单位为秒

5.时间戳格式化:转为年月日格式
from datetime import datetime
settime=1617277366.891051
print(datetime.fromtimestamp(settime))#2021-04-01 19:42:46.891051
print(datetime.fromtimestamp(settime).strftime('%a,%b %Y-%m-%d %H:%M:%S'))#Thu,Apr 2021-04-01 19:42:46

6.时区
from datetime import datetime
settime=1617277366.891051
#fromtimestamp():格式化后的时间是当前操作系统设定的时区,如设定的是北京时区是东8区,则返回的是北京时区是东8区的时间
print(datetime.fromtimestamp(settime))#2021-04-01 19:42:46.891051
#timestamp也可以直接被转换到UTC标准时区的时间(格林威治标准时间与北京时间差了8小时)
print(datetime.utcfromtimestamp(settime))#2021-04-01 11:42:46.891051

datetime 加减:对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+和-运算符
from datetime import datetime,timedelta
settime=datetime(2020,3,20,12,12,0)
nowtime=datetime.now()
delta=nowtime-settime
print(delta)#377 days, 8:01:06.188967
print(delta.days)#337
print(delta.seconds)#28907 获取到当前时间到设定时间相差的秒数

  • timedelta:时间间隔

    该函数表示两个时间的间隔,参数可选、默认值都为0:datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

#得到明天所处于一年中的第几天了,以及处于星期几
from datetime import datetime,timedelta
now=datetime.now()
print(now.strftime('%j ,%a'))#091 ,Thu
print((now+timedelta(days=1)).strftime('%j ,%a'))#092 ,Fri

思考题

  • 通过datetime模块获取当前时间(这样的时间格式:2019 - 08 - 13)
from datetime import datetime,date
#方法一
print(datetime.now().strftime('%Y-%m-%d '))
#方法二
print(date.today())
#方法三
print(datetime.today())

  • 把字符串str='2019年8月10日10:10:10'转成时间戳
from datetime import datetime
str='2019年8月10日10:10:10'
time=datetime.strptime(str,'%Y年%m月%d日%H:%M:%S')
print(time)#2019-08-10 10:10:10
print(settime.timestamp())

#注:含有中文字符的时间格式的字符串,可以通过strptime()来转换为时间对象,但时间对象不能通过strftime()来转化成含有中文字符的时间格式的字符串类型(如:2019年8月10日10:10:10),需要通过formate来转化

  • 已知当前时间datetime类型的时间对象,请得到第二天这个时候的datetime类型的时间对象?

    请得到未来一小时这个时候的datetime类型的时间对象?

from datetime import datetime,timedelta
time=datetime.now()
print((time+timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'))
print((time+timedelta(hours=1)).strftime('%Y-%m-%d %H:%M:%S'))

  • 请用datetime类型的时间对象来表述当前时间,请把datetime类型的时间对象转成字符串格式为(年 - 月 - 日 时:分:秒)
from datetime import datetime
time=datetime.now().strftime('%Y{}%m{}%d{} %H{}%M{}%S{}').format('年','月','日','时','分','秒')
print(time)
  • 求当前时间到2019-8-24 还差____天____小时____分钟____秒
from datetime import datetime
settime=datetime.strptime('2019-8-24','%Y-%m-%d')
nowtime=datetime.now()
delta=settime-nowtime
print(delta)
sec=delta.seconds%60#获取秒
minute=int(((delta.seconds-sec)/60)%60)#获取分钟
hourse=int((delta.seconds-sec)/3600)#获取小时
print('相差{}天{}小时{}分钟{}秒'.format(delta.days,hourse,minute,sec))