datetime模块用于是date和time模块的合集,datetime有两个常量,MAXYEAR和MINYEAR,分别是9999和1
%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 当前时区的名称
%% %号本身
datetime.date(year,month,day),返回year-month-day
print(datetime.date(2021,9,13))
结果:
2021-09-13
datetime.date.today(),获取当天的年月日,返回year-month-day
print(datetime.date.today())
结果:
2021-09-13
a = datetime.date.today()
print(a.year)
print(a.month)
print(a.day)
结果:
2021
9
13
datetime.date.isocalendar(),让所使用的日期符合ISO标准,返回一个包含三个值的元组,三个值依次为:year年份,week number周数,weekday星期数(周一为1…周日为7)
print(datetime.date.today().isocalendar())
结果:
(2021, 37, 1)
datetime.date.isoformat(), 返回符合ISO 8601标准 (YYYY-MM-DD) 的日期字符串;
print(datetime.date.today().isoformat())
结果:
2021-09-13
datetime.date.isoweekday(): 返回符合ISO标准的指定日期所在的星期数(周一为1…周日为7)
print(datetime.date.today().isoweekday())
结果:
1
datetime.date.strftime(format):把日期时间按照给定的format进行格式化。
print(datetime.date.today().strftime("%Y %m %d"))
结果:
2021 09 13
datetime.date.ctime(),返回英文的时间格式标准 格式如 Mon Sep 13 00:00:00 2021
print(datetime.date.today().ctime())
结果:
Mon Sep 13 00:00:00 2021
datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类
datetime类有很多参数,datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]),返回年月日,时分秒
datetime.datetime.now():返回当前系统时间
print(datetime.datetime.now())
结果:
2021-09-13 23:08:13.415655
datetime.datetime.ctime() 将datetime.datetime类型转化成str类型,输出:Sun Jul 28 15:47:51 2019
print(datetime.datetime.now().ctime())
结果:
Mon Sep 13 23:08:44 2021
datetime.datetime.now().date():返回当前日期时间的日期部分
print(datetime.datetime.now().date())
结果:
2021-09-13
datetime.datetime.now().time():返回当前日期时间的时间部分
print(datetime.datetime.now().time())
结果:
23:10:54.719265
datetime.datetime.utctimetuple():返回UTC时间元组
print(datetime.datetime.now().utctimetuple())
结果:
time.struct_time(tm_year=2021, tm_mon=9, tm_mday=13, tm_hour=23, tm_min=11, tm_sec=52, tm_wday=0, tm_yday=256, tm_isdst=0)
datetime.datetime.combine(date,time):将一个date对象和一个time对象合并生成一个datetime对象:
a = datetime.datetime.now()
print(datetime.datetime.combine(a.date(),a.time()))
结果:
2021-09-13 23:14:31.712160
datetime.datetime.strftime(format):由日期格式转化为字符串格式
print(datetime.datetime.now().strftime('%b-%d-%Y %H:%M:%S'))
结果:
Sep-13-2021 23:20:10
datetime.datetime.strptime(string,format):由字符串格式转化为日期格式
print(datetime.datetime.strptime('Sep-13-2021 23:20:10', '%b-%d-%Y %H:%M:%S'))
结果:
2021-09-13 23:20:10
time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
>>> a = datetime.time(12,20,59,899)
>>> a
datetime.time(12, 20, 59, 899)
>>> a.hour
12
>>> a.minute
20
>>> a.second
59
>>> a.microsecond
899
1.datetime.time.replace()
2.datetime.time.strftime(format):按照format格式返回时间
3.datetime.time.tzname():返回时区名字
4.datetime.time.utcoffset():返回时区的时间偏移量
timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)
days、seconds、microseconds、milliseconds、minutes、hours、weeks,且默认是0。
#求出距离当前时间向前两天十小时的时间
delta = datetime.timedelta(days = 2,hours = 2)
print(datetime.datetime.now())
print(datetime.datetime.now()-delta)
结果:
2021-09-14 11:40:27.702018
2021-09-12 09:40:27.702018
待补充,个人觉得没啥用
#获取当天时间的日期与时分秒
print(datetime.datetime.now())
#获取当天时间的日期与时分秒_方法一
print(datetime.datetime.now().date())
#获取当天时间的日期与时分秒_方法二
print(datetime.date.today())
#获取当天时间的日期与时分秒
print(datetime.datetime.now().time())
结果:
2021-09-14 11:52:52.459443
2021-09-14
2021-09-14
11:52:52.459443
# 先获取当前时间的日期
today = datetime.date.today()
# 上个月的最后一天 即本月第一天减去一天
lastday = datetime.date(today.year,today.month,1)-datetime.timedelta(days=1)
# 上个月第一天
firstday = datetime.date(today.year,today.month-1,1)
print(lastday)
print(firstday)
结果:
2021-08-31
2021-08-01
start = datetime.datetime.now()
time.sleep(2)
end = datetime.datetime.now()
print((end - start).seconds)
结果:
2
可以计算: 天(days), 小时(hours), 分钟(minutes), 秒(seconds), 微秒(microseconds).
delta = datetime.timedelta(days = 2,hours = 2)
print(datetime.datetime.now())
print(datetime.datetime.now()-delta)
结果:
2021-09-14 11:40:27.702018
2021-09-12 09:40:27.702018
# 计算当月最后一天 即下个月的第一天-天数1
def eomonth(date_object):
# 首先得判断当前时间是否为每年的最后一个月
if date_object.month == 12:
# 若是12月 则year+1 ,month为1
next_month_first_date = datetime.date(date_object.year+1,1,1)
else:
# 若不是12月 则month+1
next_month_first_date = datetime.date(date_object.year, date_object.month+1, 1)
return next_month_first_date - datetime.timedelta(1)
date = datetime.date.today()
print(eomonth(date))
print(eomonth(date).day)
结果:
2021-09-30
30
# 计算当月最后一天 即下个月的第一天-天数1
def eomonth(date_object):
# 首先得判断当前时间是否为每年的最后一个月
if date_object.month == 12:
# 若是12月 则year+1 ,month为1
next_month_first_date = datetime.date(date_object.year+1,1,1)
else:
# 若不是12月 则month+1
next_month_first_date = datetime.date(date_object.year, date_object.month+1, 1)
return next_month_first_date - datetime.timedelta(1)
#计算指定日期下个月当天的日期
def edate(date_object):
# 首先得判断当前时间是否为每年的最后一个月
if date_object.month == 12:
# 若是12月 则year+1 ,month为1,day为date_object.day 无论如何date_object.day都是小于等于31的 一月有31天不会出现bug
next_month_date = datetime.date(date_object.year+1, 1,date_object.day)
else:
# 若不是12月 还需要分情况讨论 因为有大小月的情况存在 这个月的有第31天 但下个月不一定有 首先获取下个月的第一天
next_month_first_day = datetime.date(date_object.year,date_object.month+1,1)
# 如果所求日期下个月没有 则以下个月的最后一天代替,这里调用了获取下个月有多少天的函数
if date_object.day > eomonth(next_month_first_day).day:
next_month_date = datetime.date(date_object.year,date_object.month+1,eomonth(next_month_first_day).day)
else:
next_month_date = datetime.date(date_object.year, date_object.month+1, date_object.day)
return next_month_date
date = datetime.date.today()
print(date)
print(edate(date))
结果:
2021-09-14
2021-10-14
today = datetime.date.today()
this_monday = today - datetime.timedelta(today.isoweekday()-1)
last_monday = this_monday - datetime.timedelta(7)
last_weekday = today -datetime.timedelta(7)
print(this_monday)
print(today)
print(last_monday)
print(last_weekday)
结果:
2021-09-13
2021-09-14
2021-09-06
2021-09-07