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)

  关于时间的库暂时就写到这里,以后遇到再补

posted @ 2025-03-14 22:41  叶无齐  阅读(158)  评论(0)    收藏  举报

python学习之路

[python随笔]