4. python time和datetime模块

news/2025/2/24 11:36:13/文章来源:https://www.cnblogs.com/supershy/p/18733660

4. python time和datetime模块

time()

1. 模块概述

time 模块主要处理以下内容:

  • 时间戳(Timestamp):从1970年1月1日00:00:00 UTC开始的秒数(浮点数)。
  • 结构化时间(struct_time):由9个字段组成的元组,表示时间的各个部分(年、月、日等)。
  • 格式化时间字符串:如 "2023-10-01 12:30:45"

2. 常用函数

(1) 获取时间

  • time.time()
    返回当前时间的时间戳(浮点数)。

    import time
    timestamp = time.time()  # 示例输出:1696141200.123456
    
  • time.ctime([secs])
    将时间戳转换为可读的本地时间字符串。若未提供参数,默认使用当前时间。

    time_str = time.ctime()  # 输出:'Sat Oct  1 12:30:45 2023'
    
  • time.gmtime([secs])
    将时间戳转换为UTC时区的 struct_time 对象。默认使用当前时间。

    utc_time = time.gmtime()
    
  • time.localtime([secs])
    将时间戳转换为本地时区的 struct_time 对象。默认使用当前时间。

    local_time = time.localtime()
    

(2) 程序休眠

  • time.sleep(secs)
    暂停程序执行 secs 秒(可以是浮点数)。

    time.sleep(2.5)  # 休眠2.5秒
    

(3) 时间格式转换

  • time.mktime(t)
    将本地时间的 struct_time 转换为时间戳。

    timestamp = time.mktime(local_time)
    
  • time.strftime(format[, t])
    struct_time 转换为格式化的字符串。若未提供 t,默认使用 localtime()

    formatted = time.strftime("%Y-%m-%d %H:%M:%S", local_time)
    # 示例输出:'2023-10-01 12:30:45'
    
  • time.strptime(string, format)
    将格式化字符串解析为 struct_time

    parsed_time = time.strptime("2023-10-01", "%Y-%m-%d")
    

(4) 性能计时

  • time.perf_counter()
    返回高精度的性能计时器值(包含睡眠时间),用于测量代码执行时间。

    start = time.perf_counter()
    # 执行代码...
    end = time.perf_counter()
    print(f"耗时:{end - start}秒")
    
  • time.process_time()
    返回当前进程的CPU时间(不包含睡眠时间),用于分析CPU使用率。


3. struct_time 结构

struct_time 是一个包含9个字段的元组:

索引 属性 描述 取值范围
0 tm_year 年份(如2023) 正整数
1 tm_mon 月份 1-12
2 tm_mday 1-31
3 tm_hour 小时 0-23
4 tm_min 分钟 0-59
5 tm_sec 0-61(闰秒)
6 tm_wday 星期几(0=周一) 0-6
7 tm_yday 一年中的第几天 1-366
8 tm_isdst 夏令时标志(0/1/-1) -1(未知)

4. 时间格式化符号

strftimestrptime 中使用的常见格式指令:

符号 说明 示例
%Y 年份(4位数) 2023
%m 月份(01-12) 10
%d 日(01-31) 01
%H 小时(00-23) 14
%M 分钟(00-59) 30
%S 秒(00-59) 45
%A 完整的星期名称 Monday
%a 简写的星期名称 Mon
%B 完整的月份名称 October
%b 简写的月份名称 Oct
%p AM/PM AM
%Z 时区名称 UTC

5. 示例代码

(1) 获取并格式化当前时间

import timenow = time.localtime()
formatted = time.strftime("%Y-%m-%d %H:%M:%S", now)
print(formatted)  # 输出:2023-10-01 12:30:45

(2) 计算代码执行时间

start = time.perf_counter()
time.sleep(1)
end = time.perf_counter()
print(f"耗时:{end - start}秒")  # 输出:1.000123秒

(3) 解析时间字符串

time_str = "2023-10-01"
parsed = time.strptime(time_str, "%Y-%m-%d")
print(parsed.tm_year)  # 输出:2023

6. 注意事项

  1. 时区问题gmtime() 返回UTC时间,localtime() 返回本地时间。
  2. 时间戳精度time.time() 在Windows系统下精度较低(约0.001秒),而 time.perf_counter() 提供更高精度。
  3. 夏令时处理tm_isdst 字段可能影响本地时间的转换。

通过掌握这些内容,可以高效地使用 time 模块处理各种时间相关任务。

datetime()

1. 模块概述

datetime 模块包含以下主要类:

  • datetime.date:处理日期(年、月、日)。
  • datetime.time:处理时间(时、分、秒、微秒)。
  • datetime.datetime:日期和时间的组合(最常用)。
  • datetime.timedelta:表示时间间隔(如天、秒、微秒)。
  • datetime.tzinfo:时区信息的基类(需自定义或使用第三方库如 pytz)。

2. 常用类及方法

(1) datetime.date

  • 创建日期对象

    from datetime import date
    d = date(2023, 10, 1)  # 年、月、日
    
  • 常用属性和方法

    print(d.year)     # 2023
    print(d.month)    # 10
    print(d.day)      # 1
    print(d.weekday())   # 返回星期几(0=周一,6=周日)
    print(d.isoformat()) # 返回ISO格式字符串 "2023-10-01"
    

(2) datetime.time

  • 创建时间对象

    from datetime import time
    t = time(12, 30, 45)  # 时、分、秒、微秒(可选)
    
  • 常用属性和方法

    print(t.hour)    # 12
    print(t.minute)  # 30
    print(t.second)  # 45
    print(t.isoformat()) # "12:30:45"
    

(3) datetime.datetime(最常用)

  • 创建日期时间对象

    from datetime import datetime
    dt = datetime(2023, 10, 1, 12, 30, 45)  # 年、月、日、时、分、秒
    
  • 常用方法

    • 获取当前时间

      now = datetime.now()  # 本地当前时间
      utc_now = datetime.utcnow()  # UTC当前时间
      
    • 日期时间拆分

      print(now.year, now.month, now.day)
      print(now.hour, now.minute, now.second)
      
    • 转换为时间戳

      timestamp = now.timestamp()  # 返回浮点型时间戳
      
    • 从时间戳创建

      dt = datetime.fromtimestamp(1696141200.0)  # 本地时间
      dt_utc = datetime.utcfromtimestamp(1696141200.0)  # UTC时间
      
    • 格式化输出

      formatted = now.strftime("%Y-%m-%d %H:%M:%S")  # "2023-10-01 12:30:45"
      
    • 解析字符串

      parsed = datetime.strptime("2023-10-01 12:30", "%Y-%m-%d %H:%M")
      

(4) datetime.timedelta

表示时间间隔,用于日期时间的加减:

from datetime import datetime, timedeltanow = datetime.now()
# 加减时间
future = now + timedelta(days=3, hours=2)  # 3天2小时后
past = now - timedelta(weeks=1)            # 1周前# 计算时间差
diff = future - past
print(diff.days)      # 10(天数差)
print(diff.seconds)   # 7200(秒数差,2小时=7200秒)

3. 时区处理

Python内置的 datetime.timezone 类(Python 3.2+)支持简单时区操作,但更复杂的时区需使用第三方库 pytz

(1) 使用 datetime.timezone

from datetime import datetime, timezone, timedelta# 创建带时区的日期时间
utc_time = datetime.now(timezone.utc)  # UTC时间
# 自定义时区(东八区)
tz = timezone(timedelta(hours=8))
local_time = datetime.now(tz)

(2) 使用 pytz(推荐)

安装:pip install pytz

import pytz
from datetime import datetime# 创建带时区的日期时间
tz_shanghai = pytz.timezone('Asia/Shanghai')
dt = datetime.now(tz_shanghai)# 时区转换
utc_dt = dt.astimezone(pytz.utc)  # 转换为UTC时间

4. 时间格式化符号

time 模块类似,常用符号如下:

符号 说明 示例
%Y 4位年份 2023
%m 月份(01-12) 10
%d 日(01-31) 01
%H 小时(00-23) 14
%M 分钟(00-59) 30
%S 秒(00-59) 45
%f 微秒(000000-999999) 123456
%A 完整星期名 Monday
%a 简写星期名 Mon
%B 完整月份名 October
%b 简写月份名 Oct
%z 时区偏移(+HHMM/-HHMM) +0800
%Z 时区名称 CST

5. 示例代码

(1) 计算两个日期的差值

from datetime import datetimedate1 = datetime(2023, 10, 1)
date2 = datetime(2023, 10, 10)
delta = date2 - date1
print(delta.days)  # 输出:9

(2) 生成最近一周的日期列表

from datetime import datetime, timedeltanow = datetime.now()
dates = [now - timedelta(days=i) for i in range(7)]
for d in dates:print(d.strftime("%Y-%m-%d"))

(3) 带时区的时间转换

import pytz
from datetime import datetime# 创建上海时区时间
tz_sh = pytz.timezone('Asia/Shanghai')
dt_sh = datetime.now(tz_sh)
print(dt_sh.isoformat())  # 输出:2023-10-01T14:30:45+08:00# 转换为纽约时区
tz_ny = pytz.timezone('America/New_York')
dt_ny = dt_sh.astimezone(tz_ny)
print(dt_ny.isoformat())  # 输出:2023-10-01T02:30:45-04:00

6. 注意事项

  1. 时区处理:默认的 datetime 对象是“无时区”的(naive),建议始终使用带时区的对象(aware)。
  2. 性能:频繁的日期计算推荐使用 timedelta,避免循环中重复创建对象。
  3. 月份和日期范围:如 date(2023, 2, 30) 会抛出 ValueError(2月无30日)。
  4. 第三方库:处理复杂时区时,优先使用 pytz 而非内置模块。

7. 总结

  • datetime vs time模块
    • datetime 更适合日期时间的复杂操作(如时区、时间差)。
    • time 模块更底层,适合处理时间戳和简单休眠。
  • 核心操作
    • 日期时间创建、格式化、解析。
    • 时间差计算(timedelta)。
    • 时区转换(结合 pytz)。

掌握 datetime 模块后,可以高效处理大多数日期时间相关的业务需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/888945.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

36、车辆过户

咨询电话:12123—>1—>5 直接说人工服务(听到对方说咨询就说 人工服务 ) 1、车辆购车日期,看行驶证(这里有个注册日期和发证日期) 2、

用PyTorch从零构建 DeepSeek R1:模型架构和分步训练详解

DeepSeek R1 的完整训练流程核心在于,在其基础模型 DeepSeek V3 之上,运用了多种强化学习策略。本文将从一个可本地运行的基础模型起步,并参照其技术报告,完全从零开始构建 DeepSeek R1,理论结合实践,逐步深入每个训练环节。通过可视化方式,由浅入深地解析 DeepSeek R1 …

解锁跨境电商成功密码:运营优化五步走

跨境电商运营优化是一个涉及多个方面的复杂过程,以下是一些关键的优化策略: 一、市场调研与精准选品 深入分析目标市场 ○ 通过市场调研工具(如Google Trends、Jungle Scout等)分析市场趋势、竞争程度及潜在需求,挖掘蓝海产品。 ○ 了解目标市场的消费需求、文化差异、政策…

【每日一题】20250224

梦是好的;否则,钱是要紧的。【每日一题】如图所示,放在固定斜面上的物块以加速度 \(a\) 沿斜面匀加速下滑,若在物块上再施加一个竖直向下的恒力 \(F\),则 A. 物块可能匀速下滑 B. 物块仍以加速度 \(a\) 匀加速下滑 C. 物块将以大于 \(a\) 的加速度匀加速下滑 D. 物块将以小…

# 如何让大模型安全地自动生成代码并执行? ## 前言

前言 本文带来的分享是在crewai中使用代码解释器,为了安全,代码在docker中运行。 为什么要使用代码解释器呢? 之前的文章中使用的是function call + 各种工具 来完成一个任务,比如文件读取工具、文件保存工具等。 但是用户的需求是多变的,你很难提前写好所有的工具。 读取…

关于远程桌面

现有电脑A(win11系统)的开机PIN是123;现在想通过windows自带的“远程桌面应用”登录到电脑A上; 下图是电脑A上的设置 (1)、设置允许远程登录(2)将用户Administrator设置为远程桌面用户(3)在与电脑A在同一个网段内的电脑B上,打开远程桌面应用,输入电脑A的IP或电脑名…

Jmeter 性能优化

Jmeter 性能优化:(3优化 + 1补充)1、在 jmx 文件中 Disable 所有的结果输出,如: View Results Tree / Graph Results / Aggregate Report 等。 2、采用命令的方式执行(如果需要生成 HTML,建议分开两段命令执行)如: call jmeter.bat -n -t test.jmx -l result.jtl call…

vite build 打包的文件取消hash码

build: {rollupOptions: {output: {entryFileNames: `assets/[name].js`, // 打包后的入口文件名chunkFileNames: `assets/[name].js`, // 打包后的代码块文件名assetFileNames: `assets/[name].[ext]`, // 打包后的静态资源文件名},},},增加这段代码即可,加的位置需要注意。

再战博客园美化(真正的五)——实际发布

25-02-24 补充 这一篇偶然在我的草稿箱里面被发现。 也就是说,从五开始,少了一篇,而我却没有发现 迭代太快了。 以下是原始文章我不免想到一个问题——如果我弄了这么多以后,发现根本不能用,那咋办? 所以我必须先尝试发布一次,得在博客园上实际看到效果。有一个文件上MB…

【草稿】图片上传2

本随笔用于上传图片 博客园居然不压缩图片,有点太良心了,我还得手动去压缩一遍。

word

选项卡的折叠和固定功能区快捷键:Ctrl+F1后退一步和前进一步的快捷键分别是:Ctrl+z、Ctrl+y页面放大和缩小命令:按住Ctrl,滚动鼠标滚轮,点击右下角的百分比,弹出显示比例对话框,可以选择一个比例,点击确定也可以实现,如下图:新建word命令,可以页面右击新建,也可以在…