首先我们导入模块,如下:
import datetime
datetime模块提供了五个常用类:date、time、datetime、timedelta、tzinfo,接下来我们对这五个常用类进行说明。
date类
date类包含三个参数,分别为year,month,day,返回格式为year-month-day。
date对象表示理想化日历中的日期(年、月和日), 公历1年1月1日被称为第一天,依次往后推。
其中用户创建时间的类方法如下:
import datetime
print("今天的日期是:",datetime.date.today()) # 今日的日期
print("使用时间戳创建的日期:",datetime.date.fromtimestamp(1234567896)) # 使用时间戳创建日期
print("使用公历序数创建的日期:",datetime.date.fromordinal(1)) # 使用公历序数创建的日期
# 结果如下:
# 今天的日期是: 2020-08-31
# 使用时间戳创建的日期: 2009-02-14
# 使用公历序数创建的日期: 0001-01-01
对象的属性及方法如下:
import datetime
today = datetime.date(year=2020,month=8,day=31) # 使用参数创建日期
print('date对象的年份:', today.year)
print('date对象的月份:', today.month)
print('date对象的日:', today.day)
print("date对象的struct_time结构为:",today.timetuple())
print("返回当前公历日期的序数:",today.toordinal()) # 与fromordinal函数作用相反
print("当前日期为星期(其中:周一对应0):{}".format(today.weekday()))
print("当前日期为星期(其中:周一对应1):{}".format(today.isoweekday()))
print("当前日期的年份、第几周、周几(其中返回为元组):",today.isocalendar())
print("以ISO 8601格式‘YYYY-MM-DD’返回date的字符串形式:",today.isoformat())
print("返回一个表示日期的字符串(其格式如:Mon Aug 31 00:00:00 2020):",today.ctime())
print("指定格式为:",today.strftime("%Y/%m/%d"))
print("替换后的日期为:",today.replace(2019,9,29))
结果如下:
date对象的年份: 2020
date对象的月份: 8
date对象的日: 31
date对象的struct_time结构为: time.struct_time(tm_year=2020, tm_mon=8, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=244, tm_isdst=-1)
返回当前公历日期的序数: 737668
当前日期为星期(其中:周一对应0):0
当前日期为星期(其中:周一对应1):1
当前日期的年份、第几周、周几(其中返回为元组): (2020, 36, 1)
以ISO 8601格式‘YYYY-MM-DD’返回date的字符串形式: 2020-08-31
返回一个表示日期的字符串(其格式如:Mon Aug 31 00:00:00 2020): Mon Aug 31 00:00:00 2020
指定格式为: 2020/08/31
替换后的日期为: 2019-09-29
其中,格式化的表达式如下:
%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 当前时区的名称
%% %号本身
time类
time类包含六个参数,分别为hour,minute,second,microsecond,tzinfo,fold,返回格式为hour:minute:second(.microsecond)。常用的参数有:hour、minute、second三个。
其对象的属性和方法如下:
import datetime
create_time = datetime.time(hour=11,minute=18,second=31) # 使用参数创建日期
print('create_time对象的小时为:', create_time.hour)
print('create_time对象的分钟为:', create_time.minute)
print('create_time对象的秒数为:', create_time.second)
print("返回create_time的字符串形式:",create_time.isoformat())
print("指定格式为:",create_time.strftime("%H/%M/%S"))
print("替换后的时间为:",create_time.replace(20,9,29))
结果如下:
create_time对象的小时为: 11
create_time对象的分钟为: 18
create_time对象的秒数为: 31
返回create_time的字符串形式: 11:18:31
指定格式为: 11/18/31
替换后的日期为: 20:09:29
datetime类
datetime类可以看作date和time类的合体,其包含了这两个类中的全部参数,其中创建datetime类的类方法如下:
import datetime
print("现在的时间是:",datetime.datetime.today())
print("返回现在的时间是:",datetime.datetime.now())
print("当前UTC日期和时间是:",datetime.datetime.utcnow())
print("对应时间戳的日期和时间是:",datetime.datetime.fromtimestamp(1234567896))
print("对应UTC时间戳的日期和时间是:",datetime.datetime.utcfromtimestamp(1234567896))
print("公历序列对应的日期和时间是:",datetime.datetime.fromordinal(1))
print("日期和时间的合体为:",datetime.datetime.combine(datetime.date(2020, 8, 31), datetime.time(12, 12, 12)))
结果如下:
现在的时间是: 2020-08-31 11:32:10.438292
返回现在的时间是: 2020-08-31 11:32:10.439289
当前UTC日期和时间是: 2020-08-31 03:32:10.439289
对应时间戳的日期和时间是: 2009-02-14 07:31:36
对应UTC时间戳的日期和时间是: 2009-02-13 23:31:36
公历序列对应的日期和时间是: 0001-01-01 00:00:00
日期和时间的合体为: 2020-08-31 12:12:12
对象的属性和方法如下:
import datetime
now = datetime.datetime(2020,8,31,12,10,10)
print("年为:",now.year)
print("月为:",now.month)
print("日为:",now.day)
print("小时为:",now.hour)
print("分钟为:",now.minute)
print("秒数为:",now.second)
print('当前日期为:', now.date() )
print('当前时间:', now.time() )
print("返回struct_time为",now.timetuple()) # 和date一样
print("返回UTC的struct_time为",now.utctimetuple())
print("返回的公历序列数为:",now.toordinal()) # 和date一样
print("返回标准日期格式为:",now.isoformat()) # 和date一样
print("返回的周几(1表示周一):",now.isoweekday()) # 和date一样
print("返回的周几(0表示周一):",now.weekday()) # 和date一样
print("now.isocalendar():", now.isocalendar()) # 和date一样
print("now.ctime():",now.ctime()) # 和date一样
print("格式化时间为:",now.strftime('%Y/%m/%d %H:%M:%S')) # 把日期按照format指定的格式进行格式化
print(datetime.datetime.strptime("2020/12/29 8:8:00",'%Y/%m/%d %H:%M:%S')) # 将字符串格式转换为日期格式
结果如下:
年为: 2020
月为: 8
日为: 31
小时为: 12
分钟为: 10
秒数为: 10
当前日期为: 2020-08-31
当前时间: 12:10:10
返回struct_time为 time.struct_time(tm_year=2020, tm_mon=8, tm_mday=31, tm_hour=12, tm_min=10, tm_sec=10, tm_wday=0, tm_yday=244, tm_isdst=-1)
返回UTC的struct_time为 time.struct_time(tm_year=2020, tm_mon=8, tm_mday=31, tm_hour=12, tm_min=10, tm_sec=10, tm_wday=0, tm_yday=244, tm_isdst=0)
返回的公历序列数为: 737668
返回标准日期格式为: 2020-08-31T12:10:10
返回的周几(1表示周一): 1
返回的周几(0表示周一): 0
now.isocalendar(): (2020, 36, 1)
now.ctime(): Mon Aug 31 12:10:10 2020
格式化时间为: 2020/08/31 12:10:10
2020-12-29 08:08:00
timedelta类
timedelta类代表两个datetime对象之间的时间差,即两个日期或者日期时间之差。支持参数:weeks、days、hours、minutes、seconds、milliseconds、microseconds。但是据官方文档说其内部只存储days、seconds 和 microseconds,其他单位会做对应的时间转换。
import datetime
now = datetime.date.today()
before_5_date = now + datetime.timedelta(days=-5)
print("now date is:",now) # 表示现在的日期
print("\n")
print("before five days date is:",before_5_date) # 表示五天前的日期
now_time = datetime.datetime.now()
print(now_time)
after_5_hours_10_minutes = now_time + datetime.timedelta(hours=5,minutes=10)
print(after_5_hours_10_minutes)
结果如下:
now date is: 2020-08-31
before five days date is: 2020-08-26
2020-08-31 13:14:53.862049
2020-08-31 18:24:53.862049