Python时间模块

发布于:2025-05-11 ⋅ 阅读:(15) ⋅ 点赞:(0)

  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

转换关系

time.localtime
time.mktime
time.strftime
time.strptime
时间戳
struct_time
时间格式字符串

使用示例:

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

网站公告

今日签到

点亮在社区的每一天
去签到