判断是否是闰年:calendar模块
1、calendar模块isleap(年份)函数
import calendar
print(calendar.isleap(2022))
2、闰年规律
闰年:400整数倍,或4的整数倍但不是100的整数倍
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
datetime模块
datetime类
1、定义:
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
2、自己构造日期时间datetime对象:
- 必须含有的参数:year,month,day
- 创造datetime库里datetime类的对象obj1:
datetime_obj = datetime.datetime(2022,3,13,23,50,10, 1000)
3、获得当前日期时间
datetime_obj.now()
>datetime.datetime(2022, 3, 14, 0, 35, 25, 445048)
4、分别获得datetime_obj的年月日时分秒
print(datetime_obj.year, datetime_obj.month, datetime_obj.day, datetime_obj.hour, datetime_obj.minute, datetime_obj.second, datetime_obj.microsecond)
2022 3 13 23 50 10 1000
5、格式化输出日期时间
datetime_obj.isoformat()
'2022-03-13T23:50:10.001000'
datetime_obj.strftime('%Y-%m-%d %H:%M:%S.%f')
'2022-03-13 23:50:10.001000'
datetime类的timetuple()方法:返回time.struct_time
属性值的获取方式有两种:
- 可以把它当做一种特殊的有序不可变序列通过 下标/索引 获取各个元素的值,如t[0]
- 也可以通过 .属性名 的方式来获取各个元素的值,如t.tm_year。
当前datetime是一年中的第几天:struct_time1.tm_yday
datetime_obj = datetime_obj.now()
struct_time1 = datetime_obj.timetuple()
struct_time1
>time.struct_time(tm_year=2022, tm_mon=3, tm_mday=14, tm_hour=0, tm_min=43, tm_sec=7, tm_wday=0, tm_yday=73, tm_isdst=-1)
struct_time1.tm_yday
>73
某日期是星期几
now = datetime.datetime.now()
# 1、范围为[1,7]
now.isoweekday()---->1
# 2、范围为[0,6]
now.weekday() ---->0
# 2、范围为[0,6]
now.timetuple().tm_wday ----->0
timedelta类:对两datetime求差值
1、定义
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, hours=0, weeks=0)
2、两datetime_obj相减,得到timedelta对象
datetime_obj1 = datetime.datetime(2022,3,12,23,50,10, 1000)
datetime_obj2 = datetime.datetime(2021,3,11,23,50,8, 1000)
timedelta_obj = (datetime_obj1 - datetime_obj2)
timedelta_obj
> datetime.timedelta(days=366, seconds=2)
3、timedelta对象得到天/秒数差
- 返回真正的天数差:
timedelta_obj.days
- 返回对应时分秒的秒数差,不算天数:
timedelta_obj.seconds
- 返回真正秒数差:
timedelta_obj.total_seconds()
timedelta_obj
> datetime.timedelta(days=366, seconds=2)
timedelta_obj.total_seconds()
>31622402.0
timedelta类:对初始datetime加减
可同时改变多个属性,只能改变:
- days:天数; weeks:周数; seconds:秒数
datetime_obj = datetime.datetime(2022,1,1,12,50,10,1000)
datetime_obj + datetime.timedelta(days = 1)
>datetime.datetime(2022, 1, 2, 12, 50, 10, 1000)
datetime_obj + datetime.timedelta(weeks = 1)
>datetime.datetime(2022, 1, 8, 12, 50, 10, 1000)
datetime_obj + datetime.timedelta(seconds = 1)
>datetime.datetime(2022, 1, 1, 12, 50, 11, 1000)
datetime_obj + datetime.timedelta(days=-1, seconds = -1)
>datetime.datetime(2021, 12, 31, 12, 50, 9, 1000)
应用
1、判断今天是今年的第几天
1.1、不使用模块
def func1():
date = time.localtime();
year, month, day = date[:3]
month_days = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 闰年:400整数倍,或4的整数倍但不是100的整数倍
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
month_days[1] = 29
today_days_sum = sum(month_days[:month-1] , day) # sum([]) = 0单,独考虑1月都无所谓
return today_days_sum
1.2 使用模块
now = datetime.datetime.now()
now.timetuple().tm_yday
>73
2、某year的第n个周五是几月几号
- 知道第1个周五是几月几号
- 用起始周五日期,减去week-1周