python之时间time和datetime
先说time
time有个时间戳的概念,就是从1970.1.1到执行时间的间隔,单位是秒,比如
import time print(time.time()) #1741956425.072485
time还有个结构化时间对象 time.localtime()
import time t = time.localtime() print(t)
#t获取到的是一个元祖,里面包含了年月日时分秒等信息,注意t是一个元祖,里面的值都是不可修改对象. #time.struct_time(tm_year=2025, tm_mon=3, tm_mday=14, tm_hour=20, tm_min=51, tm_sec=1, tm_wday=4, tm_yday=73, tm_isdst=0) #依次是年月日时分秒 tm_wday表示离周一几天,,tm_day表示离今年1月1号多少天.
有了结构化对象我们就可以比较容易获取一些值,比如
print(t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec,t.tm_wday) #2025 3 14 20 58 2 4
如何获取今天的时间
import time print(time.ctime()) #表示今天的日期 Fri Mar 14 21:15:28 2025
下面我们看strftime() 格式化时间,也就是修改时间的显示方式
import time print(time.strftime("%Y-%m-%d %H:%M:%S")) #按你格式化的方式输出时间 2025-03-14 21:21:21 Y代表4位年份,m代表2位月份,d代表2位日期 #H代表24小时制的小时数,M代表分钟数,S代表秒数 I代表12小时制的小时数 print(time.strftime("%y-%m-%d %H:%M:%S")) #25-03-14 21:22:16 print(time.strftime("%Y-%m-%d %I:%M:%S")) #2025-03-14 09:22:53 #通常如果用I的话我们就和 %p一起使用,%p表示上午还是下午 print(time.strftime("%Y-%m-%d %I:%M:%S %p")) #2025-03-14 09:23:35 PM #还有一些要说的 print(time.strftime("%Y-%m-%d %H:%M:%S %a")) #2025-03-14 21:26:28 Fri %a代表星期简写 print(time.strftime("%Y-%m-%d %H:%M:%S %A")) #2025-03-14 21:26:28 Friday %A代表星期全称 print(time.strftime("%Y-%m-%d %H:%M:%S %b")) #2025-03-14 21:26:28 Mar %b代表月份简写 print(time.strftime("%Y-%m-%d %H:%M:%S %B")) #2025-03-14 21:26:28 March %B代表月份全称 print(time.strftime("%Y-%m-%d %H:%M:%S %w")) #2025-03-14 21:28:16 5 %w代表是周几,注意这里是周几,不是上面的离周一几天 print(time.strftime("%Y-%m-%d %H:%M:%S %W")) #2025-03-14 21:28:16 10 %W代表一年的第几周
然后我们来看时间等候 time.sleep(等待时间)
import time print('sleep start') time.sleep(3) print('sleep end') #打印除start后 会等3秒才会执行到end
如此我们来看一个基本案例,通常用来执行看程序执行了多少秒
import time starttime = time.time() time.sleep(5) endtime = time.time() print(f'程序执行了{(starttime-endtime):.2f}秒') #这里有两个地方要注意,第一在字符串格式化中,如果我们对小数只需要取指定位,比如2位,那么格式就是 :.2f #冒号 点号 2 f #还有一点要注意的是,如果要格式化位数,那么前面的运算方式就要加括号包裹起来 否则会报错.
time的三种时间表示方式 字符串(strftime) ,结构化时间(localtime),时间戳(mktime)
他们之间可以互相转换 但是仅限
字符串==>结构化时间
结构化时间==>时间
时间戳==>结构化时间
结构化时间==>时间戳
而时间戳和字符串之间不能直接转换,需要通过结构化对象中转一次.
import time #时间戳 ==>>结构化对象 print(time.localtime(time.time())) #time.struct_time(tm_year=2025, tm_mon=3, tm_mday=14, tm_hour=22, tm_min=28, tm_sec=45, tm_wday=4, tm_yday=73, tm_isdst=0) #结构化对象 ==>>时间戳 print(time.mktime(time.localtime())) #1741962525.0 #结构化对象 ==>>字符串 print(time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) #2025-03-14 22:28:45 #结构化对象(utc时间) ==>>字符串 print(time.strftime("%Y-%m-%d %H:%M:%S",time.gmtime())) #2025-03-14 14:28:45 #字符串 ==>>结构化对象 print(time.strptime("2017-03-14 11:11:11","%Y-%m-%d %H:%M:%S")) #time.struct_time(tm_year=2017, tm_mon=3, tm_mday=14, tm_hour=11, tm_min=11, tm_sec=11, tm_wday=1, tm_yday=73, tm_isdst=-1)
对于结构化时间 localtime 还有一个utc时间
import time print(time.gmtime()) #生成UTC时间 time.struct_time(tm_year=2025, tm_mon=3, tm_mday=14, tm_hour=14, tm_min=28, tm_sec=45, tm_wday=4, tm_yday=73, tm_isdst=0) print(time.gmtime(time.time() - 3600 )) #时间可以进行运算 time.struct_time(tm_year=2025, tm_mon=3, tm_mday=14, tm_hour=13, tm_min=28, tm_sec=45, tm_wday=4, tm_yday=73, tm_isdst=0) print(time.localtime()) #生成本地时间 time.struct_time(tm_year=2025, tm_mon=3, tm_mday=14, tm_hour=22, tm_min=28, tm_sec=45, tm_wday=4, tm_yday=73, tm_isdst=0) print(time.localtime(time.time() - 3600 )) #只要是时间戳都可以进行运算 time.struct_time(tm_year=2025, tm_mon=3, tm_mday=14, tm_hour=21, tm_min=28, tm_sec=45, tm_wday=4, tm_yday=73, tm_isdst=0)
下面我们来看看datetime
datetime主要有四个常用的方法 date time datetime timedelta
首先看date date主要就是年月日
import datetime import time a = datetime.date.today() print(a) #取今天日期 a = datetime.date(2025,2,18) print(a) #生成指定日期 a = datetime.date.fromtimestamp(time.time()) print(a) #根据时间戳生成日期 #实例属性 #可以从datetime对象中获取年、月、日等信息 print(a.year,a.month,a.day) #将datetime对象转换为结构化对象 print(a.timetuple()) #替换时间 #这就表示替换年份为2000 print(a.replace(2000)) #这就表示替换月份,年,日不变 print(a.replace(a.year,2)) #这就表示替换日,年,月不变 print(a.replace(a.year,a.month,2)) #也可以用关键字方法 print(a.replace(day=16)) # 判断星期几 # weekday,周一是0,周日是6 print(a.weekday()) # isoweekday,周一是1,周日是7 print(a.isoweekday()) #日期格式化,和time模块一样 print(a.strftime('%Y年%m月%d日'))
time就是时分秒
import datetime import time #datetime.time对象表示时间,不包含日期 t = datetime.time(12,30,59) print(t) print(t.hour,t.minute,t.second) #time和date基本差不多,就不赘述了,比如 print(t.isoformat()) print(t.strftime('%H-%M-%S'))
而datetime就表示年月日加时分秒
import datetime import time #datetime.datetime对象表示日期和时间 dt = datetime.datetime(2025,2,18,12,30,59) print(dt) print(dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second) dt = datetime.datetime.now() print(dt) dt = datetime.datetime.today() print(dt) #datetime.now()和datetime.today()的区别在于, #datetime.now()可以指定时区,datetime.today()默认是本地时区 #我们可以通过tz来指定时区 dt = datetime.datetime.now(tz=None) print(dt) #时间戳转换为datetime对象 dt = datetime.datetime.fromtimestamp(time.time()) print(dt) #从字符串转换为datetime对象 dt = datetime.datetime.strptime('2025-2-18 12:30:59','%Y-%m-%d %H:%M:%S') #datetime对象格式化 print(dt.strftime('%Y年-%m月-%d日 %H:%M:%S')) #我们可以只取其中的一部分格式化,未指定格式的部分会被忽略 print(dt.strftime('%Y-%m-%d日')) #同样也有替换时间的方法 print(dt.replace(2000)) #其他通用,我们就不赘述了
timedelta主要用在时间的计算上,比如某某和某某差多少天啊 ,某某日期减去某某日期后是几号啊
import datetime import time #datetime对象可以进行加减运算,得到的结果也是datetime对象 dt = datetime.datetime.now() dt2 = dt + datetime.timedelta(days=20) print(dt2) #两个datetime对象相减,得到的是datetime.timedelta对象 dt = datetime.datetime.now() dt2 = dt + datetime.timedelta(days=20) print(dt2 - dt)
关于时间的库暂时就写到这里,以后遇到再补