一、说明
python中时间日期格式化符号:
%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),星期天为 0,星期一为 1,以此类推。
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
二、代码
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @Time : 2020/5/13 19:23
# @Author : 苑先森
# @File : 时间格式转换.py
# @Software : PyCharm
from datetime import datetime
import datetime as dt
t_str1 = "May 6, 2020 10:47"
t_obj1 = datetime.strptime(t_str1, "%b %d, %Y %H:%M")
print(type(t_obj1)) # 查看类型<class 'datetime.datetime'>
print(f"t_obj1:{t_obj1}") # ==> t_obj:2020-05-06 10:47:00
t_str2 = "May 6, 2020 10:47am GMT+0800"
t_obj2 = datetime.strptime(t_str2, "%b %d, %Y %H:%M%p %Z+0800") # %p同等与am或pm,%Z:当前时区的名字
print(f"t_obj2:{t_obj2}") # t_obj2:2020-05-06 10:47:00 看似正常
t_str3 = "May 6, 2020 10:47pm GMT+0800"
t_obj3 = datetime.strptime(t_str3, "%b %d, %Y %H:%M%p %Z+0800") # %p同等与am或pm,%Z:当前时区的名字
print(f"t_obj3:{t_obj3}") # t_obj3:2020-05-06 10:47:00 难道不是22:47:00
# 注意%H是24小时制,%I才是12小时制
t_str4 = "May 6, 2020 10:47pm GMT+0800"
t_obj4 = datetime.strptime(t_str4, "%b %d, %Y %I:%M%p %Z+0800") # %p同等与am或pm,%Z:当前时区的名字
print(f"t_obj4:{t_obj4}") # t_obj4:2020-05-06 22:47:00 正常,秒数如果没有,默认为0,年份默认1970
# 如果想转换时区,最直接的直接减
t_obj5 = t_obj4 - dt.timedelta(hours=8)
print(f"t_obj5:{t_obj5}") # t_obj5:2020-05-06 14:47:00
# 判断两个时间的先后顺序
t_new = t_obj4
t_old = t_obj5
print((t_new - t_old)) # 8:00:00,相差8个小时
print((t_old - t_new)) # -1 day, 16:00:00,相差16个小时
# 利用days
print((t_new - t_old).days) # 0, 判断结果 >= 0,说明前面的时间(t_new)要比后面的时间(t_old)更长
print((t_old - t_new).days) # -1, 一旦结果 < 0,说明前面的时间(t_old)要比后面的时间(t_new)更短