Python时间模块
time 和 datetime 是 Python 中处理时间的两个重要模块,它们提供了不同的功能来处理时间相关的操作。
time模块
time 模块主要提供与系统时间相关的基础功能,侧重于时间戳和简单的时间格式处理。
- time.time():返回当前时间的时间戳(即从 1970 年 1 月 1 日至今的秒数)。
- time.localtime([seconds]):可选参数seconds为时间戳,默认为当前时间。将给定的时间戳转换为本地时间的 struct_time 对象。
- time.mktime(t):t 为struct_time 对象,将 struct_time 对象转换为时间戳(即自1970年1月1日至今的秒数)。
- time.strptime(string[, format]):将指定格式format的时间字符串string解析为 struct_time 对象。
- time.strftime(format[, t]):t 为struct_time 对象,将 struct_time 对象按指定格式format转变为时间字符串。
常用格式代码 | 含义 | 示例 |
---|---|---|
%Y | 四位年份 | 2023 |
%y | 两位年份 | 23 |
%m | 月份 (01-12) | 07 |
%d | 日 (01-31) | 15 |
%H | 24小时制小时 (00-23) | 14 |
%I | 12小时制小时 (01-12) | 02 |
%M | 分钟 (00-59) | 30 |
%S | 秒 (00-59) | 45 |
%X | 等同于 %H:%M:%S(24小时制) | 14:30:45 |
%A | 完整星期名 | Monday |
%a | 缩写星期名 | Mon |
%B | 完整月份名 | July |
%b | 缩写月份名 | Jul |
%p | AM/PM | PM |
- time.struct_time 类:struct_time 是一个结构体类型,用于表示时间。它是 time 模块中的时间元组,包含 9 个时间属性。
属性名 | 描述 | 取值范围 |
---|---|---|
tm_year | 年 | 如 2023 |
tm_mon | 月 | 1-12 |
tm_mday | 日 | 1-31 |
tm_hour | 时 | 0-23 |
tm_min | 分 | 0-59 |
tm_sec | 秒 | 0-61 (60和61是闰秒) |
tm_wday | 星期几 | 0-6 (0是周一) |
tm_yday | 一年中的第几天 | 1-366 |
tm_isdst | 夏令时标志 | -1, 0, 1 |
转换关系
使用示例:
import time# 获取当前时间戳
timestamp = time.time()
print(timestamp)# 将时间戳转换为本地时间 struct_time对象
local_time = time.localtime(timestamp)
print(local_time)# 将当前时间的 struct_time 对象转换为时间戳
timestamp = time.mktime(time.localtime())
print(timestamp)# 将格式化字符串转换为 struct_time 对象
date_obj = time.strptime("2025-04-23 14:30:00", "%Y-%m-%d %X")
print(date_obj)# 将 struct_time 对象格式化为字符串
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(formatted_time)
datetime模块
datetime 模块提供了更高级的时间和日期操作功能,可以创建和操作日期、时间对象。它支持时间加减、时区转换、格式化和解析等操作。
常见类:
- datetime.date: 表示日期(年、月、日)
- datetime.time: 表示时间(时、分、秒、微秒)
- datetime.datetime: 表示日期和时间(年、月、日、时、分、秒、毫秒)
- datetime.timedelta: 表示两个 datetime 对象之间的差值,用来进行时间的加减操作。
- datetime.tzinfo: 处理时区信息(抽象基类)
类 | | | |
---|---|---|---|
date | date(year, month, day) | ● year: 获取年份 ● month: 获取月份 ● day: 获取日 | ● replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变) ● timetuple():返回日期对应的time.struct_time对象; ● weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推; ● isoweekday():返回星期数,如果是星期一,返回1;如果是星期2,返回2,以此类推; ● isoformat():返回格式如’YYYY-MM-DD’的字符串; ● strftime(format):将date对象转为format格式时间字符串。 ● today():返回一个表示当前本地时间的date对象。 |
time | time(hour, minute, second, microsecond,tzinfo=None, *, fold=0) | ● hour: 获取小时 ● minute: 获取分钟 ● second: 获取秒 ● microsecond: 获取微秒 | ● isoformat():返回格式如’%H:%M:%S’的字符串; ● strftime(format):将time对象转为format格式时间字符串。 |
datetime | datetime(year, month, day, hour, minute, second, microsecond,tzinfo=None, *, fold=0) | 同上 | ● isoformat():返回格式如’YYYY-MM-DD %H:%M:%S’的字符串。 ● strftime(format):将datetime对象转为format格式时间字符串。 ● strptime(date_string, format):将格式字符串转换为datetime对象。 ● now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间。 ● today():返回一个表示当前本地时间的datetime对象。 ● fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息。 |
timedelta | timedelta(days, hours, minutes, seconds, microseconds,milliseconds,weeks) | ● days: 返回天数 ● seconds: 返回秒数 ● microseconds: 返回微秒数 | |
tzinfo | tzinfo 是一个抽象基类,用于处理时区信息。用户可以继承该类实现时区功能,但标准库中的 datetime 模块并没有直接提供具体的时区类。pytz 库提供的时区类继承了tzinfo类并实现了时区相关的方法。 | | dt:datetime对象 ● utcoffset(self, dt):返回与 UTC 的时差,返回一个 timedelta 对象。 ● dst(self, dt):返回夏令时的时差,返回一个 timedelta 对象。 ● tzname(self, dt):返回时区名称,通常是一个字符串。 |
参数补充说明——tzinfo:时区信息对象;fold:处理重复时间(夏令时),0或1
from datetime import *# date类
d = date(2021, 10, 26)
today = date.today()
print('d:', d, ', today:', today) # d: 2021-10-26 , today: 2025-05-09
print(d.year,d.month,d.day) # 2021 10 26
print('weekday():', d.weekday()) # weekday(): 1
print('isoweekday():', d.isoweekday()) # isoweekday(): 2
print('isoformat():', d.isoformat()) # isoformat(): 2021-10-26
print('strftime():', d.strftime("%Y-%m-%d")) # strftime(): 2021-10-26# time类
t = time(14, 30, 15) # 创建一个时间对象,表示14点30分15秒
print(t) # 输出: 14:30:15
print(t.hour) # 14
print(t.minute) # 30
print(t.second) # 45
print(t.microsecond) # 123456
print(t.isoformat()) # "14:30:45"
print(t.strftime("%H:%M")) # "14:30"# datetime类
dt = datetime(2023, 7, 15, 14, 30, 45, 123456)
print(dt.year) # 2023
print(dt.month) # 7
print(dt.day) # 15
print(dt.hour) # 14
print(dt.minute) # 30
print(dt.second) # 45
print(dt.microsecond) # 123456
print(dt.date()) # 获取date部分
print(dt.time()) # 获取time部分
print(dt.timestamp()) # 获取时间戳
print(dt.isoformat()) # "2023-07-15T14:30:45"
print(dt.strftime("%Y-%m-%d %H:%M:%S")) # 自定义格式化
print(datetime.strptime('2022-03-21', "%Y-%m-%d"))
print(datetime.now())# timedelta类
dt = datetime.now()
dt_1 = dt + timedelta(days=-1)#昨天
dt_11 = dt - timedelta(days=1)#昨天
dt3 = dt + timedelta(days=1)#明天
dt_hour = dt + timedelta(hours=1) # tzinfo类
class BeijingTime(tzinfo):def utcoffset(self, dt):return timedelta(hours=8)def tzname(self, dt):return "Beijing Time"def dst(self, dt):return timedelta(0)
beijing_tz = BeijingTime()
dt = datetime(2023, 7, 15, 14, 30, 45, tzinfo=beijing_tz)
print(dt) # 2023-07-15 14:30:45+08:00