设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间07 现在时间07 缓存数据 女人不要只算计自己喜欢的任何物品多少钱,要计算自己的青春还剩多少年;要懂得爱自己,舍得爱自己;不为别人,只为那个限量版的自己!

女人不要只算计自己喜欢的任何物品多少钱,要计算自己的青春还剩多少年;要懂得爱自己,舍得爱自己;不为别人,只为那个限量版的自己!

查看: 303|回复: 0

Python日期与时间模块(datetime+time+Calendar+dateuil )相关使用讲解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:205
  • 打卡月天数:0
  • 打卡总奖励:3233
  • 最近打卡:2023-08-27 07:19:29
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
387
主题
351
精华
0
金钱
4350
积分
758
注册时间
2022-12-24
最后登录
2025-5-31

发表于 2023-2-10 22:43:40 | 显示全部楼层 |阅读模式
1 前言

在开发中经常会遇到查询日期、时间、时间戳,或者日期比较等相关操作,为了方便以后使用,本文将对python操作时间的各种操作做出总结。
时间戳: 即以整型或浮点型表示的是一个以秒为单位的时间间隔。这个时间的基础值是从1970年的1月1号零点开始算起。

2 datetime 模块

此模块常用类有:date、time、datetime、timedelta
导入:
  1. from datetime import *
复制代码
2.1 date类

获取当前日期:
  1. from datetime import *

  2. dt = date.today()
  3. print(dt)                # 输出:2022-09-07

  4. print(dt.year)          # 2022
  5. print(dt.month)
  6. print(dt.day)

  7. # 返回星期几  星期一 = 0
  8. print(dt.weekday())             # 输出:2
  9. # 返回星期几  星期一 = 1
  10. print(dt.isoweekday())          # 0001-01-01

  11. # 返回 ctime() 样式字符串
  12. print(dt.ctime())               # Wed Sep  7 00:00:00 2022
  13. # 修改 年、月、日
  14. print(dt.replace(year=2023))    # 输出:2023-09-07
  15. # 打印最大/最小日期
  16. print(dt.max)                   # 9999-12-31
  17. print(dt.min)                   # 0001-01-01
复制代码
使用date类的构造函数,初始化变量
  1. d = date(2022, 9, 6)
  2. print(d)                        # 输出:2022-09-06
复制代码
字符串初始化为date
  1. d = date.fromisoformat("2022-09-06")
  2. print(d)        # 2022-09-06
  3. print(type(d))  # <class 'datetime.date'>
复制代码
时间戳 转 date对象
  1. d = date.fromtimestamp(1662451516)
  2. print(d)            # 2022-09-06
复制代码
date 转 字符串
  1. d = date.today()
  2. str_date = d.isoformat()
  3. print(str_date)          # 2022-09-06 字符串
复制代码
2.2 time类
  1. from datetime import time

  2. t1 = time(10, 20, 32)
  3. print(t1)   # 输出:10:20:32

  4. # 打印时分秒
  5. print(t1.hour)
  6. print(t1.minute)
  7. print(t1.second)

  8. # 将对象转为字符串
  9. res = time.isoformat(t1)
  10. # print(t1.isoformat()) # 方式2
  11. print(res)              # 输出:10:20:32
  12. print(type(res))        # 输出:<class 'str'>
复制代码
2.3 datetime类
  1. from datetime import datetime

  2. # datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
  3. t = datetime(2022, 9, 7, 20, 32, 20)
  4. print(t)

  5. # 打印 年月日 时分秒
  6. print(t.year)
  7. print(t.month)
  8. print(t.day)
  9. print(t.hour)
  10. print(t.minute)
  11. print(t.second)

  12. # 获取当前时间
  13. today = datetime.now()
  14. print(today)

  15. # 字符串转为datetime
  16. d = datetime.fromisoformat("2022-09-10 12:25:36")
  17. print(type(d))        # <class 'datetime.datetime'>
复制代码
2.4 timedelta类

主要用于计算日期差异,或者日期相关操作

2.4.1 时间增加
  1. from datetime import datetime, timedelta

  2. now = datetime.now()
  3. print(now)

  4. # 加2天
  5. # def __new__(cls, days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
  6. new_time = now + timedelta(days=2)
  7. print(new_time.strftime("%Y-%m-%d %H:%M:%S"))

  8. # 加1周
  9. new_time = now + timedelta(weeks=1)
  10. print(new_time.strftime("%Y-%m-%d %H:%M:%S"))
复制代码
2.4.2 计算时间差
  1. from datetime import datetime, date

  2. # 计算时间差
  3. now = datetime.now()
  4. # 将字符串转为<class 'datetime.datetime'>
  5. d = datetime.fromisoformat("2022-09-10 12:25:36")
  6. res = d - now
  7. print(res)
  8. print(res.days)
  9. print(res.seconds)
复制代码
234402r9gd1u3m3g7q14v9.png


2.5 datetime格式化
  1. from datetime import datetime, date

  2. now = datetime.now()
  3. print(now)
  4. print(now.strftime("%Y-%m-%d %H:%M:%S"))
  5. print(now.strftime("%y-%m-%d %H:%M:%S %A"))
复制代码
234402zylgvzggwfifuguy.png

符号描述%y两位数的年份表示(00-99)%Y四位数的年份表示(0000-9999)%m月份(01-12)%d月内的天(0-31)
%H24h值小时数(0-23)
%I12小时小时数
%M分钟数(00-59)
%S秒(00-59)
%a本地简化星期名称
%A本地完整星期名称
%b本地简化月份名称
%B本地完整月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M.或P.M.的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(0-53)星期一位星期的开始
%x本地相应的日期表示
%X本地相应的事假表示
%Z当前时区的名称
%%%号本身

3 time 标准库

元组表示法:以Python的数据结构表示,共有9个。
属性描述tm_year年tm_mon月(1-12)tm_mday日(1-31)tm_hour时(0-23)tm_min分(0-59)tm_sec秒(0-59)tm_wday0-6(0表示周日)tm_yday1-366(一年中的第几天)tm_isdst默认为-1(是否为夏令时)
3.1 时间操作
  1. import time

  2. # 当前timestamp
  3. timestamp = time.time()
  4. print(timestamp)

  5. # 时间戳 转 时间元组
  6. # 方式1:time.struct_time(tm_year=2022, tm_mon=9, tm_mday=10, tm_hour=16, tm_min=11, tm_sec=30, tm_wday=3, tm_yday=251, tm_isdst=0)
  7. time_tuple1 = time.localtime()
  8. # 方式2
  9. time_tuple2 = time.localtime(timestamp)
  10. print(time_tuple1)
  11. print(time_tuple2)

  12. # 时间元组 转 时间戳
  13. timestamp2 = time.mktime(time_tuple1)
  14. print(timestamp2)  # 1662624690.0

  15. # 时间元组 格式化为 时间
  16. strftime1 = time.strftime("%Y-%m-%d %H:%M:%S", time_tuple1)
  17. print(strftime1)
  18. # 时间 格式化为 时间元组
  19. time_tuple3 = time.strptime("2022-09-10 16:14:18", "%Y-%m-%d %H:%M:%S")
  20. print(time_tuple3)

  21. # 返回一个可读的时间字符串
  22. print(time.ctime())               # Thu Sep  10 16:17:40 2022
  23. print(time.ctime(time.time()))    # Thu Sep  10 16:17:40 2022

  24. print(time.asctime())
  25. print(time.asctime(time.localtime()))
复制代码
3.2 程序睡眠

程序睡眠:
  1. # 程序暂停/睡眠3s
  2. time.sleep(3)
复制代码
4 Calendar 日历模块

打印日历:
  1. import calendar

  2. cal = calendar.month(2022,9)
  3. print(cal)  # str
  4. """
  5.    September 2022
  6. Mo Tu We Th Fr Sa Su
  7.           1  2  3  4
  8. 5  6  7  8  9 10 11
  9. 12 13 14 15 16 17 18
  10. 19 20 21 22 23 24 25
  11. 26 27 28 29 30
  12. """
复制代码
闰年相关:
  1. import calendar

  2. # 判断是否为闰年
  3. print(calendar.isleap(2000))  # True
  4. print(calendar.isleap(2022))  # False

  5. # 查看2个年份之间的闰年总和
  6. print(calendar.leapdays(2008, 2060))  # 13
复制代码
5 dateuil 日期模块

安装:
  1. pip install dateutils
复制代码
  1. from datetime import datetime, date
  2. from dateutil.relativedelta import relativedelta, MO, TU, WE, TH, FR, SA, SU

  3. now = datetime.now()
  4. today = date.today()
  5. print(now)
  6. print(today)

  7. """
  8.     时间增加
  9.     dt1=None, dt2=None,
  10.     years=0, months=0, days=0, leapdays=0, weeks=0,
  11.     hours=0, minutes=0, seconds=0, microseconds=0,
  12.     year=None, month=None, day=None, weekday=None,
  13.     yearday=None, nlyearday=None,
  14.     hour=None, minute=None, second=None, microsecond=None
  15. """
  16. # 下个月
  17. next_month = now + relativedelta(months=1)
  18. print(next_month)

  19. # 一年后 前一个月
  20. next_year_prev_month = now + relativedelta(years=1, months=-1)
  21. print(next_year_prev_month)

  22. # 下周五(前提是今天为周六、周天)
  23. next_fr = now + relativedelta(weekday=FR)
  24. print(next_fr)

  25. # 计算两个日期差
  26. res = relativedelta(date(2060, 6, 20), today)
  27. print(res)          # relativedelta(years=+37, months=+9, days=+12)
  28. print(res.years)    # 37
复制代码
到此这篇关于Python日期与时间模块(datetime+time+Calendar+dateuil )相关使用讲解的文章就介绍到这了,更多相关Python时间模块 内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表