datetime模块格式化以及去掉前导0的操作说明

个人对datetime模块的总结

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']

~~~

 

posted on 2020-03-16 21:11  江湖乄夜雨  阅读(2524)  评论(0编辑  收藏  举报