datetime模块 、calendar、time

一、datetime模块

datetime模块其实是对time模块的包装,提供了更高级的API

import datetime
# datetime类:
# 方法一:指定一个日期和时间
dt = datetime.datetime(2020, 10, 28, 5, 29)
print(dt)  # 2020-10-28 05:29:00

# 方法二 根据时间戳创建
dt = datetime.datetime.fromtimestamp(1333333333)
print(dt)  # 2012-04-02 10:22:13

# 方法三:今天,现在,如果now()不指定参数的话,跟today是一样的。
dt = datetime.datetime.today()  # 2020-10-28 05:34:26.415294 今天
dt = datetime.datetime.now()  # 现在,跟today()的区别:today()不接受任何参数,now()可以接受一个tzinfo(日期)参数

print(dt.date(), type(dt.date()))  # 2020-10-28 <class 'datetime.date'>
print(dt.time(), type(dt.time()))  # 07:18:09.430138 <class 'datetime.time'>
print(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond)  # datetime类属性
print('星期:', dt.weekday())  # datetime类方法。星期: 2, 相当于星期三,你懂的
# ----------------------------------------------------------------------------------------------------------

# date类
dt = datetime.date(2020, 10, 28)
dt = datetime.date.today()
# dt = datetime.date.now() 没有now()
dt = datetime.date.fromtimestamp(1333333333)
print(dt.year, dt.month, dt.day)  # date类属性
print('星期:', dt.weekday())  # date类方法 星期: 0, 相当于星期一,你懂的
# ------------------------------------------------------------------


# time类,只能用构造方法创建
dt = datetime.time()
dt = datetime.time(6, 2, 59, 999999)
print(dt.hour, dt.minute, dt.second, dt.microsecond)  # time类属性
# ------------------------------------------------------------------------------------------------------------

# timedelta类 时间跨度
# def __init__(self, days: float = ..., seconds: float = ..., microseconds: float = ...,
#              milliseconds: float = ..., minutes: float = ..., hours: float = ...,
#              weeks: float = ..., *, fold: int = ...) -> None: ...
td = datetime.timedelta(10)
print(datetime.date.today()+td)
td = datetime.datetime.today()-datetime.datetime(2018, 9, 10, 23, 59, 59)
print(type(td))  # <class 'datetime.timedelta'>
print(td)  # 778 days, 6:19:11.499996
print(td.days)  # 778
print(td.seconds)  # 22873
print(td.microseconds) #  488769
print(td.total_seconds())  # td.days*24*3600+td.seconds+td.microseconds
# 如果要获得小时,分钟,周,需要自己换算。
# -----------------------------------------------------------------------------------------------------------


# 格式化时间strftime(对象方法) 和解析时间strptime(类方法) 注意区别:f和p
# strftime(对象方法):格式化时间
dt = datetime.datetime.today()
print(dt.strftime('%Y年%m月%d日 %H点%M分%S秒'))  # 2020年10月28日 07点05分56秒

dt = datetime.date.today()
print(dt.strftime('%Y年%m月%d日 %H点%M分%S秒'))  # 2020年10月28日 00点00分00秒

dt = datetime.time(7, 10, 59)
print(dt.strftime('%H点%M分%S秒'))  # 07点10分59秒

# strptime(类方法):解析时间
dt = datetime.datetime.strptime('2020年10月28日 07点05分56秒', '%Y年%m月%d日 %H点%M分%S秒')
print(dt, type(dt))  # 2020-10-28 07:05:56 <class 'datetime.datetime'>
# 说明:date和time类没有strptime()方法。

 

二、calendar

import calendar
# 1、打印日历
# calendar.setfirstweekday(firstweekday=0)  # 设置第一天是星期一 默认就是星期一
print(calendar.month(2020, 10))
#     October 2020
# 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

# 2、计算每个月天数
monthRange = calendar.monthrange(2020, 10)
print(monthRange)  # (3, 31)
# 输出的是一个元组,第一个元素是所查月份的第一天对应的是星期几(0-6),第二个元素是这个月的天数。
# 以上实例输出的意思为 2020 年 10 月份的第一天是星期四,该月总共有 31 天

print(calendar.mdays[10])  # 31

三、time 做一个计时器

import time
starttime = time.time()
print('开始')
while True:
    print('计时: ', round(time.time() - starttime, 0), '')
    time.sleep(1)

由于datetime模块对time模块进行了包装,所以,time模块只需要掌握上面两个方法即可,下面的只是参考

import time

a1 = "2019-5-10 23:40:00"
# 先转换为时间数组
timeArray = time.strptime(a1, "%Y-%m-%d %H:%M:%S")
print(timeArray)
# time.struct_time(tm_year=2019, tm_mon=5, tm_mday=10, tm_hour=23, tm_min=40, tm_sec=0, tm_wday=4, tm_yday=130, tm_isdst=-1)
# 转换为时间戳
timeStamp = int(time.mktime(timeArray))
print(timeStamp)
# 1557502800

# 格式转换 - 转为 /
a2 = "2019/5/10 23:40:00"
# 先转换为时间数组,然后转换为其他格式
timeArray = time.strptime(a2, "%Y/%m/%d %H:%M:%S")
otherStyleTime = time.strftime("%Y/%m/%d %H:%M:%S", timeArray)
print(otherStyleTime)
# 2019/05/10 23:40:00

 

posted @ 2020-10-28 07:50  老谭爱blog  阅读(85)  评论(0)    收藏  举报