time datetime 模块

发布于:2022-12-15 ⋅ 阅读:(249) ⋅ 点赞:(0)

目录

内置模块

time模块

datetime模块


内置模块

关于内置模块,我要求大家必须要背过的一定要背,剩下的一定要有印象。

time模块

与时间相关的模块。有三种非常重要的表现形式

  • 时间戳

  • 字符串格式化时间

  • 结构化时间

时间戳

  • 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。这个是实时变化的。我们运行“type(time.time())”,返回的是float类型。

    import time
    ret = time.time()
    print(ret, type(ret))

字符串格式化时间

供人类使用的时间。

  python中时间日期格式化符号:
    %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 当前时区的名称
    %% %号本身

简单测试:

# ret = time.strftime("%Y-%m-%d %H:%M:%S")
# ret = time.strftime("%Y-%m-%d %A")
# ret = time.strftime("%Y-%m-%d %w")
ret = time.strftime("%Y-%m-%d %j")
print(ret,type(ret))

结构化时间

命名元组(struct_time) struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)

ret = time.localtime()
# time.struct_time(
# tm_year=2022, tm_mon=9, tm_mday=16,
# tm_hour=15, tm_min=15, tm_sec=16,
# tm_wday=4, tm_yday=259, tm_isdst=0)
# print(ret, type(ret))
# print(ret[0])
# print(ret[2])
print(ret.tm_year)
print(ret.tm_yday)

时间转换

# 字符串格式化时间 -----> 时间戳
# ft = time.strftime("%Y-%m-%d %H:%M:%S")  # 获取当前的格式化时间
ft = time.strftime("2003/11/12 14:28:45")
st = time.strptime(ft, "%Y/%m/%d %H:%M:%S")  # 结构化时间
t = time.mktime(st)
print(t)
​
# 时间戳 ------> 格式化时间
t = 1168234525.0
st = time.localtime(t)  # 结构化时间
​
ft = time.strftime("%Y-%m-%d %H:%M:%S", st)
print(ft)

(这种时间转化用的不多)还有另一种转换方式,只是转化成的格式化时间是固定的格式,不能自定制,但是可以做到结构化时间与时间戳直接转化成格式化时间,省去了中间的一些步骤。


# 时间戳 ----> asctime格式化时间
# t = time.time()
# ft = time.ctime(t)
# print(ft)

# 结构化时间转化成asctime格式化时间
st = time.localtime()
ft = time.asctime(st)
print(ft)

datetime模块

与时间相关的模块,他是在time模块的基础上做了进一步提升,提供的方法与功能很多。

  • 获取当前日期和时间

    time_now = datetime.now()
    # print(time_now, type(time_now))
    # print(time_now[:-8], type(time_now))  # 报错
    # print(str(time_now)[:-7])  # 先转成字符串 在切片
    ​
  • 获取指定日期和时间

    要指定某个日期和时间,我们直接用参数构造一个datetime

    from datetime import datetime
    ​
    dt = datetime(2018, 5, 21, 14, 13, 28)
    print(dt, type(dt))  # datetime.datetime 类型
    • datetime与时间戳的转换

    from datetime import datetime
    # datetime 转化成时间戳
    ​
    # dt = datetime.now()
    # ts = dt.timestamp()
    # print(ts, type(ts))
    ​
    # 时间戳 转化成datetime类型
    ts = 166331377
    dt = datetime.fromtimestamp(ts)
    print(dt)
    • str与datetime的转换

    很多时候,用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

    # 字符串的格式化时间 ----> datetime类型
    s1 = "2003-11-21 10:47:38"  # 字符串类型
    t = datetime.strptime(s1, '%Y-%m-%d %H:%M:%S')
    # print(t, type(t))
    # datetime类型 ------> 字符串的格式化时间
    ​
    time_now = datetime.now()  # datetime类型
    ​
    s_time = time_now.strftime('%Y-%m-%d %H:%M:%S')
    print(s_time, type(s_time))
  • datetime加减

    对日期和时间进行加减实际上就是把datetime往后或往前计算,得到新的datetime。加减可以直接用+-运算符,不过需要导入timedelta这个类:

    from datetime import datetime, timedelta
    ​
    time_now = datetime.now()
    ​
    # d1 = time_now + timedelta(hours=10)  # 十小时后
    ​
    # d1 = time_now + timedelta(days=-2)  # 两天前
    ​
    # d1 = time_now + timedelta(days=3, hours=2)  # 三天两个小时后
    ​
    # d1 = time_now + timedelta(minutes=15)  # 15分钟后
    ​
    print(d1)

    可见,使用timedelta你可以很容易地算出前几天和后几天的时刻。

  • 指定datetime时间

time_now = datetime.now()
​
# t1 = time_now.replace(year=1996)  # 指定时间
# t1 = time_now.replace(year=2003, month=3)
# t1 = time_now.replace(year=2008, month=8, day=8)
t1 = time_now.replace(year=2008, month=8, day=8, hour=12,minute=18,second=19)
print(t1)
  • 小结:

    • time模块它提供的功能时更加接近于操作系统层面,部分函数都是与平台相关的,不同平台可能会有不同的效果,另外一点:由于time模块是基于Unix Timestamp,所以其所能表述的日期范围被限定在1970~2038年之间。

    • datatime模块比time模块更加高级,可以理解为datetime模块基于time模块进行的封装。提供了更多实用的函数。


网站公告

今日签到

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