我们先来了解一下计算机中的时间:
生活中的时间:从公元0年0月0日0分0秒,到现在时间间隔
计算机中的时间:从1970年1月1日0点0分0秒,到现在时间间隔
Unix时间戳: Unix时间戳是从1970年1月1日(UTC)零点开始所经过的秒数,不考虑闰秒。这个时间起点被称为“UNIX纪元”,它是一个广泛接受的标准,使得不同计算机系统之间的时间可以进行精确比较。
计算机中的时间是用来记录事件发生顺序、执行计划任务、存储文件创建修改时间等众多功能的基础要素,它的管理和使用涉及到软件和硬件多个层次的技术实现。
当我们的代码涉及到获取当前时间、格式化显示时间、计算时间间隔以及处理日期和时间的转换时。有两个关键模块可以帮助我们轻松地完成这些任务,那就是 time
和 datetime
模块。
time模块
是Python内置的基础时间处理模块,它提供了简单但实用的功能来操作时间戳(Unix时间戳,即从1970年1月1日UTC零点以来的秒数)。
time
模块提供了基本的时间和日期相关的函数,如:
time.time()
返回当前时间的浮点数表示(从 Unix 纪元以来的秒数)。time.localtime([secs])
将时间戳转换为本地时区的 struct_time 对象。time.asctime()
接受一个 struct_time 对象并返回一个可读的时间字符串。time.strftime(format[, t])
格式化本地时间,将时间元组或struct_time对象转化为格式化的字符串。time.sleep(secs)
暂停程序执行指定秒数。
接下来我们代码演示一下
#time 模块
import time
#获取当前时间戳(unix纪元以来的秒数)
timestamp=time.time()
print(f'当前时间戳:{timestamp}') #当前时间戳:1709866907.78388
#将当前时间戳转换为本地时区的struct_time对象
localtime=time.localtime(timestamp)
print(f'当前时间:{localtime}')
#当前时间:time.struct_time(tm_year=2024, tm_mon=3, tm_mday=8, tm_hour=11, tm_min=1, tm_sec=47, tm_wday=4, tm_yday=68, tm_isdst=0)
#格式化struct_time对象为可读字符串,输出本地时间
time1=time.strftime('%Y-%m-%d %H:%M:%S',localtime)
print(f'当前时间:{time1}') #当前时间:2024-03-08 11:01:47
# 转换特定字符串为时间struct_time对象并格式化输出
formatted_string = "2024-03-08 11:11:11"
t = time.strptime(formatted_string, '%Y-%m-%d %H:%M:%S')
print("转换后的struct_time对象:", t)
# 如果要将转换后的 struct_time 再次格式化为字符串,可以这样做:
formatted_t = time.strftime('%Y-%m-%d %H:%M:%S', t)
print("转换回字符串形式的时间:", formatted_t)
# 暂停n秒
time.sleep(4)
print("暂停4秒后,继续执行...") #4秒后 输出 暂停4秒后,继续执行...
datetime模块
提供了更为高级和全面的日期时间处理功能,它通过类和方法的形式呈现,更易于理解和操作。
datetime
模块提供了一套丰富的类,包括datetime
,date
,time
,timedelta
, 和tzinfo
,用以更高级、更灵活地处理日期和时间:
datetime.datetime.now()
返回当前日期和时间的 datetime 对象。datetime.date.today()
返回今天的日期对象。datetime.timedelta
用于表示两个日期或时间之间的差。可以通过加减 timedelta 对象来计算新的日期和时间。- 使用
datetime.strptime()
和datetime.datetime.strftime()
进行日期时间的字符串与 datetime 对象间的相互转换。
代码演示如下:
#datetime 模块
from datetime import datetime,timedelta
print(f'获取当前时间:{datetime.now()}')
#获取当前时间:2024-03-08 11:36:41.235931
print(f'获取当前时间戳(unix纪元以来的秒数):{datetime.timestamp(datetime.now())}')
#获取当前时间戳(unix纪元以来的秒数):1709869001.235931
print(f'获取今天日期:{datetime.today().date()}')
#获取今天日期:2024-03-08
print(f'创建一个指定日期和时间的datetime:{datetime(2024,3,8,11,11,11)}')
#创建一个指定日期和时间的datetime:2024-03-08 11:11:11
print(f'计算两个日期之间的差值:{datetime.now()-datetime(2024,1,1)}')
#计算两个日期之间的差值:67 days, 11:36:41.235931
print(f'使用timedelta增加或减少日期时间:{datetime.now()+timedelta(days=1,hours=1)}')
#使用timedelta增加或减少日期时间:2024-03-09 12:36:41.235931
print("格式化今天的字符", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
#格式化今天的字符 2024-03-08 11:36:41
# 从字符串解析日期时间
date_string = "2024-1-1 14:30:00"
parsed_date = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')
print("解析后的日期时间:", parsed_date)
#解析后的日期时间: 2024-01-01 14:30:00
总的来说,time
模块适合简单的计时和基本的时间戳转换,而datetime
模块则提供了一套完善的面向对象接口,更适合复杂的日期和时间操作。无论我们是需要处理应用程序的日志记录、计划任务执行还是数据处理分析,Python的时间处理模块都能有效帮到我们。