datetime模块格式化以及去掉前导0的操作说明
个人对datetime模块的总结
Python的datetime模块格式化操作
- %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 当前时区的名称
- %% %号本身
年月日格式化日期时去掉前导0
一般格式化日期用这种方式:
from datetime import datetime now = datetime.now() day_str = now.strftime("%Y.%m.%d") print(day_str) # 2020.03.16
但是这种格式化后如果月与日有个位数,前面会补0。
有时候前端会想要这样的数据:2020.1.3。个位数不要0。
下面我总结了几个方法:
只能在linux与mac平台上使用的方法
下面这种方法只能在linux与mac平台上使用,windows平台会报错,本人亲测:
from datetime import datetime days = ["2020.01.03","2020.02.04","2020.10.22"] days_lst = [] for i in days: day = datetime.strptime(i,"%Y.%m.%d") # print(day,type(day)) day_str = day.strftime("%Y.%-m.%-d") print(day_str) days_lst.append(day_str) # print(days_lst) # ['2020.1.3', '2020.2.4', '2020.10.22']
测试效果截图
linux系统下:
mac系统下:
windows下会报错:
通用的方法
通用的方式是使用timetuple这个方法去重新构建,代码如下:
from datetime import datetime days = ["2020.01.03","2020.02.04","2020.10.22"] days_lst = [] for i in days: day = datetime.strptime(i,"%Y.%m.%d") # print(day,type(day)) tup = day.timetuple() # 这个结构体中没有前导0 print(tup) # time.struct_time(tm_year=2020, tm_mon=1, tm_mday=3, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=3, tm_isdst=-1) day_str = f"{tup.tm_year}.{tup.tm_mon}.{tup.tm_mday}" days_lst.append(day_str) print(days_lst) # ['2020.1.3', '2020.2.4', '2020.10.22']
~~~