Python常用库(一):日期和时间

1.介绍

Python中处理时间相关的标准库,常用的有三个:time、datetime、calendar,它们分别负责不同的功能;

  • time: 提供时间和日期访问和转换的 函数
  • datetime: 用于处理日期和时间计算相关的
  • calendar: 提供日历相关的 函数

2. time使用

2.1 当前时间

import time

if __name__ == '__main__':
    currentTime = time.time()
    print("当前时间戳: {} 单位秒".format(currentTime))
    print("当前时间戳: {} 单位秒".format(int(currentTime)))
    print("当前时间戳: {} 单位毫秒".format(int(currentTime * 1000)))
    # 时间元组
    time_tuple = time.localtime(time.time())
    print("当前时间信息:", time_tuple)
    
# -------------------- 输出 -------------------   
当前时间戳: 1692195782.747853 单位秒
当前时间戳: 1692195782 单位秒
当前时间戳: 1692195782747 单位毫秒
当前时间信息: time.struct_time(tm_year=2023, tm_mon=8, tm_mday=16, tm_hour=22, tm_min=23, tm_sec=2, tm_wday=2, tm_yday=228, tm_isdst=0)
字段值说明
tm_year 年: 2008
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:未知

2.2 格式化时间

import time

if __name__ == '__main__':
    currentTime = time.localtime()
    # 这个格式化可认为是国际读法
    print("使用time.asctime:", time.asctime(currentTime))
    # 使用time.strftime
    print("使用time.strftime:", time.strftime("%Y-%m-%d %H:%M:%S", currentTime))
    print("使用time.strftime:", time.strftime("%Y-%m-%d", currentTime))
    
# ---------------------------输出----------------------------
使用time.asctime: Tue Aug 15 23:01:28 2023
使用time.strftime: 2023-08-15 23:01:28
使用time.strftime: 2023-08-15

** 1. 格式化符号说明 **

  • %y : 两位数的年份表示(00-99)
  • %Y : 四位数的年份表示(000-9999)
  • %m : 月份(01-12)
  • %d : 月内中的一天(0-31)
  • %H : 24小时制小时数(0-23)
  • %I : 12小时制小时数(01-12)
  • %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 : 一年中的星期数(00-53)星期一为星期的开始
  • %x : 本地相应的日期表示
  • %X : 本地相应的时间表示
  • %Z : 当前时区的名称
  • %% : %号本身

2.3 时间戳格式化

import time

if __name__ == '__main__':
    t = time.localtime(1692112041)
    print("反解时间:", time.strftime("%Y-%m-%d %H:%M:%S", t))
    
# ---------------------------- 输出 ----------------------------
反解时间: 2023-08-15 23:07:21

2.4 程序暂停

import time

if __name__ == '__main__':
    currentTime = time.time()
    print("开始睡眠3秒: {} ".format(time.strftime("%Y-%m-%d %H:%M:%S")))
    time.sleep(3)
    print("睡眠后: {} ".format(time.strftime("%Y-%m-%d %H:%M:%S")))
    endTime = time.time()
    print("时间相差:", endTime - currentTime)
    
# ---------------------------- 输出 ----------------------------
开始睡眠3秒: 2023-08-16 22:26:21 
睡眠后: 2023-08-16 22:26:24 
时间相差: 3.003920078277588

3. datetime使用

官网的对这个模块的介绍: 在支持日期时间数学运算的同时,实现的关注点更着重于如何能够更有效地解析其属性用于格式化输出和数据操作。

3.1 当前时间

print("当前时间: ", datetime.now())
# 当前时间:  2023-08-16 23:32:17.704450

3.2 时间戳互转

from datetime import datetime

if __name__ == '__main__':
    t = datetime(2023716234059)
    print("获取指定时间: ", t)
    # 转成时间戳
    tt = t.timestamp()
    print("转成时间戳: ", t.timestamp())
    # 时间戳反转
    print("时间戳反转: ", datetime.fromtimestamp(tt))
    
# ---------------------------- 输出 ----------------------------
获取指定时间:  2023-07-16 23:40:59
转成时间戳:  1689522059.0
时间戳反转:  2023-07-16 23:40:59

3.3 str和datetime互转

from datetime import datetime

if __name__ == '__main__':
    # 字符串时间转datetime
    strTime = "2022-02-22 22:22:22"
    d = datetime.strptime(strTime, "%Y-%m-%d %H:%M:%S")
    print("格式后时间: ", d)
    print("格式后转时间戳: ", d.timestamp())
    print("格式后类型: ", type(d))
    # datetime转字符串
    print("datetime转字符串: ", datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
    
# ---------------------------- 输出 ----------------------------
格式后时间:  2022-02-22 22:22:22
格式后转时间戳:  1645539742.0
格式后类型:  <class 'datetime.datetime'>
datetime转字符串:
  2023-08-16 23:47:24

3.4 时间计算

from datetime import datetime, timedelta

if __name__ == '__main__':
    currentTime = datetime.now()
    print("当前时间: ", currentTime.strftime("%Y-%m-%d %H:%M:%S"))
    # 3秒前
    print("3秒前: ", currentTime - timedelta(seconds=3))
    # 5分钟前
    print("5分钟前: ", currentTime - timedelta(minutes=5))
    # 2小时前
    print("2小时前: ", currentTime - timedelta(hours=2))
    # 3天前
    print("3天前: ", currentTime - timedelta(days=3))
    # 4周前
    print("4周前: ", currentTime - timedelta(weeks=4))
    
    
# ---------------------------- 输出 ----------------------------
当前时间:  2023-08-16 23:53:49
3秒前:  2023-08-16 23:53:46.581242
5分钟前:  2023-08-16 23:48:49.581242
2小时前:  2023-08-16 21:53:49.581242
3天前:  2023-08-13 23:53:49.581242
4周前:  2023-07-19 23:53:49.581242

@注: 往后求时间,则把currentTime - timedelta(n)中的减号,改成加号即可

4. calendar使用

这个库主要提供日历相关的实用函数

该库工作中使用的不是很频繁,直接列出几个常用的函数示例:

import calendar
import datetime

if __name__ == '__main__':
    # 指定日期星期几,返回[0-6]
    print("-------------------------指定日期星期几--------------------------")
    print("2023-08-22 星期几?", calendar.weekday(2023822) + 1)
    print("-------------------------判断是否是闰年--------------------------")
    print("判断2023是闰年吗?", calendar.isleap(2023))
    print("-------------------------判断有多少闰年--------------------------")
    print("判断2000-2023年有多少闰年?", calendar.leapdays(20002023))

    print("-------------------------一个月的日历矩阵-------------------------")
    # 返回一个月的日历矩阵
    print(calendar.monthcalendar(20238))
    print("-------------------------日期转换为时间戳--------------------------")
    # 将日期转换为时间戳
    print(calendar.timegm(datetime.datetime(2023822).timetuple()))

    print("-------------------------使用prmonth打印指定月日历------------------")
    # 打印月日历
    print(calendar.prmonth(20238))
    print("-------------------------使用month打印指定月日历--------------------")
    print(calendar.month(20238))
    print("---------------------------打印整年日历----------------------------")
    # 返回整年日历
    print(calendar.prcal(2023))

输出:

-------------------------指定日期星期几--------------------------
2023-08-22 星期几? 2
-------------------------判断是否是闰年--------------------------
判断2023是闰年吗? False
-------------------------判断有多少闰年--------------------------
判断2000-2023年有多少闰年? 6
-------------------------一个月的日历矩阵-------------------------
[[0, 1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12, 13], [14, 15, 16, 17, 18, 19, 20], [21, 22, 23, 24, 25, 26, 27], [28, 29, 30, 31, 0, 0, 0]]
-------------------------日期转换为时间戳--------------------------
1692662400
-------------------------打印指定月日历1---------------------------
    August 2023
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
None
-------------------------打印指定月日历2---------------------------
    August 2023
Mo Tu We Th Fr Sa Su
    1  2  3  4  5  6
 7  8  9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

---------------------------打印整年日历----------------------------
                                  2023

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5             1  2  3  4  5
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       6  7  8  9 10 11 12
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      13 14 15 16 17 18 19
16 17 18 19 20 21 22      20 21 22 23 24 25 26      20 21 22 23 24 25 26
23 24 25 26 27 28 29      27 28                     27 28 29 30 31
30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2       1  2  3  4  5  6  7                1  2  3  4
 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6                   1  2  3
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                   1  2  3
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
30 31
None

本文由 mdnice 多平台发布

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值