处理日期和时间
1 常量
MINYEAR | datetime允许的最小年份 |
MAXYEAR | datetime允许的最大年份 |
2 数据类型
datetime.date | 带有属性year,month,day |
datetime.time | 带有属性hour,minute,second,microsecond,tzinfo |
datetime.datetime | 带有属性year,month,day,hour,minute,second,microsecond,tzinfo |
datetime.timedelta | 两个date对象、两个time对象、两个datetime对象之间的时间间隔 |
datetime.tzinfo | 描述时区信息对象的抽象基类 |
datetime.timezone | 实现了datetime.tzinfo抽象基类的子类,用于表示相对于 世界标准时间(UTC)的偏移量 |
3 timedelta对象
两个date对象、两个time对象、两个datetime对象之间的时间间隔
class datetime.timedelta(days=0,
seconds=0,
microseconds=0,
milliseconds=0,
minutes=0,
hours=0,
weeks=0)
3.1 存储方式
只有 days, seconds 和 microseconds 会存储在内部。 其他的参数在存储时会进行如下的转换:
-
1毫秒会转换成1000微秒。
-
1分钟会转换成60秒。
-
1小时会转换成3600秒。
-
1星期会转换成7天。
from datetime import timedelta
delta=timedelta(
days=50,
seconds=27,
microseconds=10,
milliseconds=29000,
minutes=5,
hours=8,
weeks=2)
delta
#datetime.timedelta(days=64, seconds=29156, microseconds=10)
4 date对象
代表一个理想化历法中的日期(年、月和日)
4.1 创建date对象
class datetime.date(year, month, day)
4.2 方法
today | |
fromordinal | 公元1年1月1日的序号为1 |
fromisoformat | 根据string获得对应的date对象 |
fromisocalendar(year, week, day) | 根据指定year,week,day,返回对应的date对象 返回2023年4月份的第一天(从周一开始) 【2023年的第一周是指第一个完整周(周一在2023年的一周)】 |
replace | date.replace(year=self.year, month=self.month, day=self.day) 将replace中对应的参数替换掉 |
timetuple | 返回一个结构化的timetuple 年月日、小时分钟秒、这一周的第几天(从0开始),这一年的第几天(从1开始) |
toordinal | 距离公元1年1月1日相隔多少天 |
weekdayisoweekday | weekday——返回一个整数代表星期几,星期一为0,星期天为6 isoweekday——返回一个整数代表星期几,星期一为1,星期天为7 |
isocalendar | 返回一个由三部分组成的nametuple对象: |
strftime | strftime(string)——以string作为格式的datetime(string格式见后面) [string format time] |
4.3 运算
from datetime import timedelta
td=timedelta(days=10,weeks=2)
from datetime import date
d1=date(2023,4,1)
d2=date(2023,4,15)
d1+td,d1-td
#(datetime.date(2023, 4, 25), datetime.date(2023, 3, 8))
d1-d2,d1<d2
#(datetime.timedelta(days=-14), True)
5 datetime
5.1 创建datetime对象
class datetime.datetime(
year,
month,
day,
hour=0,
minute=0,
second=0,
microsecond=0,
tzinfo=None,
*,
fold=0)
5.2 主要方法
today | 当前时刻的datetime |
now | now(tz=none) 如果不设置tz参数的话,和today是一样的 |
utcnow | 当前 UTC 时间的 date 和 time |
fromordinal | 距离公元1年1月1日相隔几天,后面的hour\minute\second等均为0 |
combine | datetime.combine(date, time, tzinfo=self.tzinfo) 返回的内容是date和time的combine结果 |
fromisocalendar | datetime.fromisocalendar(year, week, day) 返回以year,week和day对应的datetime |
datetime | datetime中的date部分和time部分 |
replace | 将指定部分替换 |
timetupleutctimetuple | 返回一个结构化的timetuple 年月日、小时分钟秒、这一周的第几天(从0开始),这一年的第几天(从1开始) utctimetuple——UTC标准时间的timetuple() |
toordinalweekdayisoweekdayisocalendar | 同date对应方法 |
isoformat | isoformat(sep='T', timespec='auto')
|
strftime | 也是得到指定format的datetime string |
5.3 运算
类似于date
6 time对象
datetime对象除去date之后的部分
6.1 构建
datetime.time(
hour=0,
minute=0,
second=0,
microsecond=0,
tzinfo=None,
*,
fold=0)
6.2 主要方法
replace | |
isoformat | time.isoformat(timespec='auto')
|
strftime |
7 strftime 和 strptime涉及的format
7.1 strftime和strptime
strftime | strptime | |
用法 | 根据给定的格式将对象转换为字符串 | 将字符串解析为给定相应格式的datetime对象 |
方法类型 | 实例方法(类的一个实例) | 类的方法 |
使用方式 | strftime(format) | strptime(date_string, format) |
7.2 主要format
%a | 星期几的缩写
| |
%A | 星期几的完整拼写
| |
%w | 以十进制数显示的工作日,其中0表示星期日,6表示星期六 0, 1, ..., 6 | |
%d | 补零后,以十进制数显示的月份中的一天 01, 02, ..., 31 | |
%b | 月份的缩写 Jan, Feb, ..., Dec | |
%B | 月份的全拼 January, February, ..., December | |
%m | 补零后,以十进制数显示的月份 01, 02, ..., 12 | |
%y | 补零后,以十进制数表示的,不带世纪的年份。 00, 01, ..., 99 | |
%Y | 十进制数表示的带世纪的年份 0001, 0002, ..., 2013, 2014, ..., 9998, 9999 | |
%H | 以补零后的十进制数表示的小时(24 小时制) 00, 01, ..., 23 | |
%I | 以补零后的十进制数表示的小时(12 小时制) 01, 02, ..., 12 | |
%p | 本地化的 AM 或 PM AM, PM | |
%M | 补零后,以十进制数显示的分钟 00, 01, ..., 59 | |
%S | 补零后,以十进制数显示的秒 00, 01, ..., 59 | |
%Z | 时区名称 | |
%j | 以补零后的十进制数表示的一年中的日序号 001, 002, ..., 366 | |
%U |
| |
%W | 以补零后的十进制数表示的一年中的周序号(星期一作为每周的第一天)。 在新的一年中第一个星期一之前的所有日子都被视为是在第 0 周 00, 01, ..., 53 | |
%c | 本地化的适当日期和时间表示 | |
%x | 本地化的适当日期表示
| |
%X | 本地化的适当时间表示 |
参考内容:datetime --- 基本日期和时间类型 — Python 3.11.3 文档