Python数据类型:date、datetime、calendar、enum
一、时间元组
时间元组将时间拆分成各个部分。
| 下标 | 属性 | 描述 |
|---|---|---|
| 0 | tm_year | 2008 |
| 1 | tm_mon | 1 到 12 |
| 2 | tm_mday | 1 到 31 |
| 3 | tm_hour | 0 到 23 |
| 4 | tm_min | 0 到 59 |
| 5 | tm_sec | 0 到 61 (60或61 是闰秒) |
| 6 | tm_wday | 0到6 (0是周一) |
| 7 | tm_yday | 一年中的第几天,1 到 366 |
| 8 | tm_isdst | 是否为夏令时,值有:1(夏令时)、0(不是夏令时)、-1(未知),默认 -1 |
二、datetime
datetime模块将时间日期细分了:
- date 日期(年月日)
- time 时间(时分秒)
- datetime(date + time)
- timezone(时区)
- timedelta(时间间隔)
| 函数 | 描述 | 示例 |
|---|---|---|
| datetime.datetime.now() | 当前时间 | datetime.datetime(2019, 12, 9, 11, 58, 3, 823844) |
| datetime.datetime.now().date() | 获取当前日期 | datetime.date(2019, 12, 9) |
| datetime.date.today() + datetime.timedelta(days=1) | 明天 | datetime.date(2019, 12, 10) |
| datetime.datetime.now() - datetime.timedelta(days=3) | 3天前 | datetime.datetime(2019, 12, 6, 12, 5, 9, 95893) |
| datetime.datetime.combine(datetime.date.today(), datetime.time.min) | 日期和时间组合(当天开始时间) | datetime.datetime(2019, 12, 9, 0, 0) |
| datetime.datetime.combine(datetime.date.today(), datetime.time.max) | 日期和时间组合(当天结束时间) | datetime.datetime(2019, 12, 9, 23, 59, 59, 999999) |
| (datetime.datetime(2019, 12, 9, 0, 0, 0) - datetime.datetime.now()).total_seconds() | 获取两个日期的差的秒数 | 43854.034031 |
日期格式化:datetime和str转换
- %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 当前时区的名称
- %% %号本身
# 日期转字符串 2022-10-20 15:50:22datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")# 字符串转日期 <class 'datetime.datetime'>datetime.datetime.strptime("2014-12-31 18:20:10","%Y-%m-%d %H:%M:%S")日期datetime和时间戳timestamp转换
timestamp=datetime.datetime.now().timestamp()# 2022-10-20 15:43:56.071982now=datetime.datetime.fromtimestamp(timestamp)本周最后一天
datetime.date.today()+datetime.timedelta(6-today.weekday())本月最后一天
>>>importcalendar>>>today=datetime.date.today()>>>_,last_day_num=calendar.monthrange(today.year,today.month)>>>last_day=datetime.date(today.year,today.month,last_day_num)>>>last_day datetime.date(2015,1,31)获取上个月的最后一天(可能跨年)
>>>importdatetime>>>today=datetime.date.today()>>>first=datetime.date(day=1,month=today.month,year=today.year)>>>lastMonth=first-datetime.timedelta(days=1)获取当前时间元组
# datetime 转元组 struct_time# time.struct_time(tm_year=2022, tm_mon=10, tm_mday=20, tm_hour=15, tm_min=19, tm_sec=20, tm_wday=3, tm_yday=293, tm_isdst=-1)datetime.datetime.now().timetuple()获取当天日期
# 2022-10-20datetime.datetime.now().date()# 2022-10-20today=datetime.date.today()# 2022-10-19yesterday=today-datetime.timedelta(days=1)# 上个月份 9last_month=today.month-1iftoday.month-1else12获取当天日期的开始时间
# 2022-10-20today=datetime.date.today()# 2022-10-20 00:00:00datetime.datetime.combine(today,datetime.time())# 2022-10-20 00:00:00datetime.datetime.combine(today,datetime.time.min)# 2022-10-20 23:59:59.999999datetime.datetime.combine(today,datetime.time.max)三、枚举 enum
Enum有3个属性:name(枚举名如:monday)、value(枚举值如:1)、label(枚举描述如:星期一)
fromenumimportEnum,unique# 枚举中的key不能相同,value可以相同,如果希望value不相同可以使用@unique来限制# IntEnum 表示value值只能是整型数字或者整型字符串@uniqueclassWeekday(Enum):monday=1tuesday=2wednesday=3thursday=4friday=5saturday=6sunday=7# 为枚举项添加其他属性,可以为同一个枚举项添加多个属性Weekday.monday.label='星期一'Weekday.tuesday.label='星期二'Weekday.wednesday.label='星期三'Weekday.thursday.label='星期四'Weekday.friday.label='星期五'Weekday.saturday.label='星期六'Weekday.sunday.label='星期日'# 枚举可以使用==或者is关键字进行比较monday=Weekday['monday']monday2=Weekday(1)# <enum 'Weekday'> monday 1 星期一 True Trueprint(type(Weekday.monday),Weekday.monday.name,Weekday.monday.value,Weekday.monday.label,monday==monday2,mondayismonday2)