datetime类
datetime模块包含timedelta、datetime、date和time等常用的类
2.1.timedelta类
timedelta 对象表示两个 date 或者 time 的时间间隔
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
所有参数都是可选的并且默认为 0。这些参数可以是整数或者浮点数,也可以是正数或者负数。
只有 days, seconds 和 microseconds 会存储在内部。参数单位的换算规则如下:
1毫秒会转换成1000微秒。
1分钟会转换成60秒。
1小时会转换成3600秒。
1星期会转换成7天。
并且 days, seconds, microseconds 会经标准化处理以保证表达方式的唯一性,即:
0 <= microseconds < 1000000
0 <= seconds < 3600*24 (一天的秒数)
-999999999 <= days <= 999999999
from datetime import timedelta
类属性
最小的间隔
timedelta.min
datetime.timedelta(days=-999999999)
最大的间隔
timedelta.max
datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)
两个不相等的 timedelta 类对象最小的间隔
timedelta.resolution
datetime.timedelta(microseconds=1)
实例属性
delta = timedelta(days=50,seconds=27,microseconds=10)
print(delta)
50 days, 0:00:27.000010
间隔天数
delta.days
50
间隔秒数
delta.seconds
27
间隔微秒数
delta.microseconds
10
实例方法
返回时间间隔包含了多少秒
delta.total_seconds()
4320027.00001
注释:
结果正确,但可能会溢出。
结果正确,不会溢出。
除以0将会抛出异常 ZeroDivisionError 。
-timedelta.max 不是一个 timedelta 类对象。
timedelta 对象的字符串表示形式类似于其内部表示形式被规范化。对于负时间增量,这会导致一些不寻常的结果。例如:
timedelta(hours=-5)
datetime.timedelta(days=-1, seconds=68400)
print(_)
-1 day, 19:00:00
表达式 t2 - t3 通常与 t2 + (-t3) 是等价的,除非 t3 等于 timedelta.max; 在这种情况下前者会返回结果,而后者则会溢出。
2.2. datetime类
datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。
与 date 对象一样,datetime 假定当前的Gregorian向前后两个方向无限延伸;与 time 对象一样,datetime 假定每一天恰好有 3600*24 秒。
class datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
from datetime import datetime
返回本地时区的当前日期时间
datetime.today()
datetime.datetime(2021, 2, 8, 22, 38, 20, 550529)
获取本地时区当前日期时间
datetime.today()
datetime.datetime(2021, 2, 8, 22, 38, 20, 880645)
获取当前utc日期时间
datetime.utcnow()
datetime.datetime(2021, 2, 8, 13, 16, 23, 118320)
返回时间戳的对应日期时间,本地时区
datetime.fromtimestamp(time.time())
datetime.datetime(2021, 2, 8, 22, 41, 5, 35913)
返回时间戳的对应日期时间,utc时区
datetime.utcfromtimestamp(time.time())
datetime.datetime(2021, 2, 8, 14, 43, 48, 569356)
返回 Gregorian 日历时间序号对应的日期,其中公元 1 年 1 月 1 日的序号为 1
datetime.fromordinal(1)
datetime.datetime(1, 1, 1, 0, 0)
返回一个新的 datetime 对象,对象的日期部分等于给定的 date 对象的值,而其时间部分等于给定的 time 对象的值
d = datetime.today()
datetime.combine(d.date(),d.time())
datetime.datetime(2021, 2, 8, 22, 46, 38, 695820)
返回一个对应于 date.isoformat() 和 datetime.isoformat() 所提供的某一种 date_string 的 datetime 对象
datetime.fromisoformat('2021-02-10')
datetime.datetime(2021, 2, 10, 0, 0)
返回 年、周、日对应的万年历中对应的日期,比如2021年第一个完整周的第1天是1月4日
返回一个对应于 date_string,根据 format 进行解析得到的 datetime 对象
datetime.strptime('2021-02-10 12:12:12','%Y-%m-%d %H:%M:%S')
datetime.datetime(2021, 2, 10, 12, 12, 12)
类属性
最早的可表示 datetime,datetime(MINYEAR, 1, 1, tzinfo=None)
datetime.min
datetime.datetime(1, 1, 1, 0, 0)
最晚的可表示 datetime,datetime(MAXYEAR, 12, 31, 23, 59, 59, 999999, tzinfo=None)
datetime.max
datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
两个不相等的 datetime 对象之间可能的最小间隔
date.resolution
datetime.timedelta(days=1)
实例属性
d = datetime.today()
print(d)
2021-02-08 22:53:25.610051
年份
d.year
2021
月份
d.month
2
日
d.day
8
小时
d.hour
22
分钟
d.minute
53
秒
d.second
25
微秒
d.microsecond
610051
实例方法
返回具有同样 year, month 和 day 值的 date 对象
d.date()
datetime.date(2021, 2, 8)
返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象
d.time()
datetime.time(22, 53, 25, 610051)
返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 time 对象
d.timetz()
datetime.time(22, 53, 25, 610051)
返回一个具有同样属性值的 datetime,除非通过任何关键字参数为某些属性指定了新值
d.replace(day=11)
datetime.datetime(2021, 2, 11, 22, 53, 25, 610051)
返回对应于 datetime 实例的 时间戳
d.timestamp()
1612796005.610051
返回一个整数代表星期几,星期一为 0,星期天为 6
d.weekday()
0
返回一个整数代表星期几,星期一为 1,星期天为 7
d.isoweekday()
1
返回一个表示日期和时间的字符串
d.ctime()
'Mon Feb 8 22:53:25 2021'
返回一个由显式格式字符串所指明的代表日期和时间的字符串,要获取格式指令的完整列表
d.strftime('%Y-%m')
'2021-02'
2.3. date类
date是表示日期的类,常用属性:year, month, day
date 对象代表一个理想化历法中的日期(年、月和日),即当今的Gregorian向前后两个方向无限延伸。
公元 1 年 1 月 1日是第 1 日,公元 1 年 1 月 2 日是第 2 日,依此类推。
class datetime.date(year, month, day)
所有参数都是必要的。参数必须是在下面范围内的整数:
MINYEAR <= year <= MAXYEAR
1 <= month <= 12
1 <= 日期 <= 给定年月对应的天数
如果参数不在这些范围内,则抛出 ValueError 异常。
from datetime import date
返回本地时区当前日期
date.today()
datetime.date(2021, 2, 8)
返回时间戳的对应日期,本地时区
date.fromtimestamp(time.time())
datetime.date(2021, 2, 8)
返回 Gregorian 日历时间序号对应的日期,其中公元 1 年 1 月 1 日的序号为 1
date.fromisoformat('2021-02-09')
datetime.date(1, 1, 1)
返回一个对应于以 YYYY-MM-DD 格式给出的 date_string 的 date 对象
date.fromisoformat('2021-02-09')
datetime.date(2021, 2, 9)
类属性
最小的日期
date.min
datetime.date(1, 1, 1)
最大的日期
date.max
datetime.date(9999, 12, 31)
两个日期对象的最小间隔
date.resolution
datetime.timedelta(days=1)
实例属性
date对象对应的年
date.today().year
2021
date对象对应的月
date.today().month
2
date对象对应的日
date.today().day
8
实例方法
d = date.today()
print(d)
2021-02-08
返回一个具有同样值的日期
d.replace(day=10)
datetime.date(2021, 2, 10)
返回一个 time.struct_time,即 time.localtime() 所返回的类型
d.timetuple()
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=0, tm_yday=39, tm_isdst=-1)
返回日期的Gregorian序号,其中公元 1 年 1 月 1 日的序号为 1
d.toordinal()
737829
返回一个整数代表星期几,星期一为0,星期天为6
d.weekday()
0
返回一个整数代表星期几,星期一为1,星期天为7
d.isoweekday()
1
返回一个由三部分组成的 named tuple 对象: year, week 和 weekday
d.isocalendar()
(2021, 6, 1)
返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串
d.isoformat()
'2021-02-08'
对于日期对象 d, str(d) 等价于 d.isoformat()
d.__str__()
'2021-02-08'
返回一个表示日期的字符串
d.ctime()
'Mon Feb 8 00:00:00 2021'
返回一个由显式格式字符串所指明的代表日期的字符串
d.strftime('%Y-%m')
'2021-02'
与 date.strftime() 相同。 此方法使得为 date 对象指定以 格式化字符串字面值 表示的格式化字符串以及使用 str.format() 进行格式化成为可能
d.__format__('%Y-%m')
'2021-02'
小例子:计算生日倒计时
import time
from datetime import date
今天 = date.today()
生日 = date(today.year, 4, 7)
生日倒计时 = abs(生日-今天)
生日倒计时.days
58
2.4. time类
一个 time 对象代表某日的(本地)时间,它独立于任何特定日期,并可通过 tzinfo 对象来调整。
class datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
所有参数都是可选的。tzinfo 可以是 None,或者是一个 tzinfo 子类的实例。其余的参数必须是在下面范围内的整数:
0 <= hour < 24,
0 <= minute < 60,
0 <= second < 60,
0 <= microsecond < 1000000,
fold in [0, 1].
如果给出一个此范围以外的参数,则会引发 ValueError。所有参数值默认为 0,只有 tzinfo 默认为 None。
关于 time类的 属性、方法等和date类差不多,这里不再做过多赘述。
摘自公众号:可以叫我才哥