感知型和简单型
- 感知和简单都是针对时间进行区别的,所以只有datetime和time类具有该属性
- 感知型:明确政治时间等信息,具有时区信息属性—— tzinfo
- 简单型:忽略政治时间等信息,简单表示一个时间。
- tzinfo 对象:会捕获与 UTC 时间的差值、时区名称以及夏令时是否生效等信息
类的关系
- object
- timedelta
- tzinfo
- timezone
- time
- date
- datetime
timedelta 类
-
定义:
timedelta 对象表示两个 date 或者 time 的时间间隔(datetime是date的子类,包含在timedelta中了) -
timedelta格式:
class datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
这些参数可以使int,也可以是float,可以是正数,也可以是负数。 -
timedetla参数转换:
内部储存时,python会将各参数的值计算转换成days, seconds, microseconds三个参数。示例:
from datetime import timedelta
a = timedelta(days = 5, seconds = 20, microseconds = 10, milliseconds = 39000, minutes = 5, hours = 10, weeks = 2)
a
# 返回
datetime.timedelta(days=19, seconds=36359, microseconds=10)
-
类属性:
- timedelta.min(最小值):datetime.timedelta(days=-999999999)
- timedelta.max(最大值):datetime.timedelta(days=999999999, seconds=86399, microseconds=999999)
- timedelta.resolution(最小时间间隔):datetime.timedelta(microseconds=1)
-
timedelta计算:
- 和date类计算:可以进行加、减法运算。
- 和timedelta类计算:可进行加、减、除、取整、取余运算。
- 和int、float数值计算:可进行乘、除运算。
- 与任意类型均可进行==或!=的布尔运算。
date 类
-
定义: date类表示了一个包含了年、月、日信息的类。
-
date格式: date(year, month, day)
-
类属性:
- date.min(最小值):date(1, 1, 1)
- date.max(最大值):date(9999, 12, 31)
- date.resolution(最小间隔):datetime.timedelta(days=1)
- date.year
- date.month
- date.day
-
date计算:
- 和date类计算:可以进行减法、布尔运算。
- 和timedetla类计算:可以进行加、减法运算。
-
实例方法:
实例方法将一个date格式的日期如(datetime.date(2018, 9, 8))转化为str格式或tuple格式的日期
from datetime import date
# date是类名,a是对date这个类的调用,并输入参数。
a = date(2018,9,8)
a
# 返回
datetime.date(2018, 9, 8)
方法 | 释义 | 示例 | 返回 |
---|---|---|---|
ctime | 返回ctime()样式字符串 | a.ctime() | ‘Sat Sep 8 00:00:00 2018’ |
isocalendar | 返回一个年份,周号,工作日的元组 | a.isocalendar() | (2018, 36, 6) |
isoformat | 返回一个字符串格式的日期 | a.isoformat() | ‘2018-09-08’ |
isoweekday | 返回日期是星期几(周一返回1) | a.isoweekday() | 6 |
strftime(“str”) | 以字符串形式,返回一个指定的日期格式 | a.strftime(’%Y/%m/%d’) | ‘2018/09/08’ |
timetuple | 返回一个时间元组 | a.timetuple() | time.struct_time(tm_year=2018, tm_mon=9, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=251, tm_isdst=-1) |
weekday | 返回日期是星期几(周一返回0) | a.weekday() | 5 |
replace(year, month, day) | 替换一个日期,并根据关键字替换对应参数 | a.replace(day=1) | datetime.date(2018, 9,1) |
toordinal | 返回日期的格里高利序号 | a.toordinal() | 736695 |
- 类方法:
将时间戳,字符串等格式的日期,转换为date格式日期
方法 | 释义 | 示例 | 返回 |
---|---|---|---|
date.today | 返回本地的当前时间 | date.today() | datetime.date(2020, 8, 4) |
date.fromtimestamp ( timestamp) | 根据给出的时间戳参数,返回一个date日期 | date.fromtimestamp(1596547490) | datetime.date(2020, 8, 4) |
date.fromordinal | 按照格里高利序号,返回一个日期 | date.fromordinal(a.toordinal()) | datetime.date(2018, 9, 8) |
date.fromisoformat | 将一个“yyyy-mm-dd”格式转化为日期格式 | date.fromisoformat(‘2018-09-08’) | datetime.date(2018, 9, 8) |
time 类
-
定义: 代表了忽略了日期的本地时间,可以通过tzinfo参数来调整。
-
time格式: time ( hour, minute, second, microsecond, tzinfo, fold)
-
类属性:
- time.min(最小值):time(0,0,0)
- time.max (最大值):time(23,59,59,999999)
- time.resolution:timedelta(microsecond=1)
-
time计算: time类无法进行算数运算。
-
实例属性:
- fold:取值 0或1,用于消除夏令时带来的时间影响。
- hour
- microsecond
- minute
- second
- tzinfo:用于描述时区,默认None。
-
实例方法:
创建一个time
from datetime import time
b=time(18,23,45)
b
# 返回
datetime.time(18, 23, 45)
方法 | 释义 | 示例 | 返回 |
---|---|---|---|
isoformat (timespec) | 返回一个字符串格式时间 | b.isoformat() | ‘18:23:45’ |
replace () | 替换一个时间,并根据关键字替换对应参数(可以通过tzinfo=None将感知型变为简单型) | b.replace(14,16,28) | datetime.time(14, 16, 28) |
strftime | 返回一个字符串类型的时间 | b.strftime(’%H-%M-%S’) | ‘18-23-45’ |
tzname | 返回时区的名字 | print(b.tzname()) | None |
utcoffset | 返回时区的偏移量 | print(b.utcoffset()) | None |
-
实例方法参数:
-
replace (hour, minute, second, microsecond, tzinfo, fold)
-
isoformat (timespec)
timespec可以选择以下内容:- 默认auto:返回 HH:MM:SS 格式,如有有microsecond, tzinfo ,fold等参数会有调整。
- hours:返回 HH 格式
- minutes:返回 HH:MM 格式
- seconds:返回 HH:MM:SS 格式
- milliseconds:返回HH:MM:SS.sss 格式
- microseconds:返回HH:MM:SS.ffffff 格式
-
datetime 类
-
定义: 包含了date 类和time 类所有信息的单一对象。
-
datetime格式: datetime ( year, month, day, hour, minute, second, microsecond, tzinfo)
-
datetime计算:
- 与datetime类,进行减法计算,返回一个timedelta对象。
- 与datetime类,进行布尔比较,返回一个布尔值。
- 与timedelta类,进行加减法计算,返回一个新的datetime对象。
-
实例属性:
- date.min(最小值):min = datetime.datetime(1, 1, 1, 0, 0)
- date.max(最大值):max = datetime.datetime(9999, 12, 31, 23, 59, 59, 999999)
- date.resolution(最小间隔):resolution = datetime.timedelta(microseconds=1)
-
实例属性:
- year(从date类继承来的)
- month(从date类继承来的)
- day(从date类继承来的)
- hour
- minute
- second
- microsecond
- fold
- tzinfo
-
实例方法:
新建一个datetime对象
from datetime import datetime
dt = datetime(2018,1,1,12,30,30)
dt
# 返回
datetime.datetime(2018, 1, 1, 12, 30, 30)
from datetime import timedelta, timezone
dt1 = datetime (2019,1,1,10,30,30,tzinfo=timezone(timedelta(hours=8)))
dt1
# 返回
datetime.datetime(2019, 1, 1, 10, 30, 30, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
方法 | 释义 | 示例 | 返回 |
---|---|---|---|
date | 返回具有相同年、月、日的date对象 | dt_date = dt.date() | datetime.date(2018, 1, 1) |
time | 返回具有相同时、分、秒的time对象 | dt_time = dt.time() | datetime.time(12, 30, 30) |
timetz | 返回具有相同时、分、秒、tzinfo信息的感知性 time 对象 | dt1_timetz = dt1.timetz() | datetime.time(10, 30, 30, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800))) |
replace() | 根据参数数据替换原datetime对象的相应部分 | dt_replace = dt.replace(day=10,hour=15) | datetime.datetime(2018, 1, 10, 15, 30, 30) |
astimezone ( tz ) | 返回一个具有新的 tzinfo 属性的datetime对象。tz参数可选 | dt1_astimezone = dt1.astimezone(tz=timezone(timedelta(hours=4))) | atetime.datetime(2019, 1, 1, 6, 30, 30, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400))) |
utcoffset | 返回时区的偏移量 | dt1_utcoffset = dt1.utcoffset() | datetime.timedelta(seconds=28800) |
tzname | 返回tzinfo的名字 | dt1_tzname = dt1.tzname() | ‘UTC+08:00’ |
timetulpe | 返回一个时间元组 | dt_timetuple = dt.timetuple() | time.struct_time(tm_year=2018, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=30, tm_sec=30, tm_wday=0, tm_yday=1, tm_isdst=-1) |
utctimetuple | 返回一个对应的UTC时间的时间元组,tm_isdst默认为0 | dt_utctimetuple = dt1.utctimetuple() | time.struct_time(tm_year=2019, tm_mon=1, tm_mday=1, tm_hour=2, tm_min=30, tm_sec=30, tm_wday=1, tm_yday=1, tm_isdst=0) |
timestamp | 返回一个时间戳,与tzinfo信息无关 | dt_timestamp = dt.timestamp() | 1514781030.0 |
isoformat (sep, timespec) | 返回一个ISO 8601 格式表示的日期和时间字符串 | dt_isoformat = dt.isoformat(sep=" " ,timespec=‘minutes’) | ‘2018-01-01 12:30’ |
ctime | 返回一个表示日期和时间的字符串 | dt_ctime = dt.ctime() | ‘Mon Jan 1 12:30:30 2018’ |
toordinal | 返回一个格里高利序号 | dt_toordinal = dt.toordinal() | 736695 |
weekday | 返回周号,周一记做0 | dt_weekday = dt.weekday() | 0 |
isoweekday | 返回周号,周一记做1 | dt_isoweekday = dt.isoweekday() | 1 |
isocalendar | 返回一个年份,周号,工作日的元组 | dt_isocalendar = dt.isocalendar() | (2018, 1, 1) |
-
实例方法参数:
- replace ( year, month, day, hour, minute, second, microsecond, tzinfo)
- isoformat (sep, timespec)
- sep:默认T,可以修改
- timespec可以选择以下内容:
- 默认auto:返回 HH:MM:SS 格式
- hours:返回 HH 格式
- minutes:返回 HH:MM 格式
- seconds:返回 HH:MM:SS 格式
- milliseconds:返回HH:MM:SS.sss 格式
- microseconds:返回HH:MM:SS.ffffff 格式
-
类方法:
方法 | 释义 | 示例 | 返回 |
---|---|---|---|
today | 返回本地的当前时间 | dt= datetime.today() | 2020-08-10 22:38:06.955231 |
now ( tzinfo ) | 返回本地的当前时间,tzinfo可选(未指定时和today一样) | dt= datetime.now() | 2020-08-10 22:38:06.955231 |
utcnow | 返回当前utc的日期时间 | dt= datetime.utcnow() | 2020-08-10 14:38:06.955231 |
fromtimestamp ( timestamp, tzinfo ) | 将时间戳转换成本地日期和时间(tzinfo参数可选) | dt = datetime.fromtimestamp(1293856201.0) | datetime.datetime(2011, 1, 1, 12, 30, 1) |
utcfromtimestamp ( timestamp ) | 返回utc的datetime,结果为简单型 | dt = datetime.utcfromtimestamp(1293856201.0) | datetime.datetime(2011, 1, 1, 4, 30, 1) |
fromordinal ( ordinal ) | 返回格里高利序号对应的日期 | dt = datetime.fromordinal(735568) | datetime.datetime(2014, 12, 1, 0, 0) |
fromisoformat (date_string ) | 对 isoformat 进行逆操作,根据规定的字符串格式,返回一个datetime对象 | dt = datetime.fromisoformat(‘2015-12-01T12:30:30’) | datetime.datetime(2015, 12, 1, 12, 30, 30) |
combine ( date, time, tzinfo ) | 将日期,时间参数结合成datetime,tzinfo参数可选 | dt = datetime.combine(date(2015,12,1),time(12,30,30)) | datetime.datetime(2015, 12, 1, 12, 30, 30) |
tzinfo 类
- 定义: tzinfo是一个抽象的基类,不能直接实例化,需要使用其子类(比如timezone)的实例化对象来获取时区信息。
timezone 类
-
定义: timezone类是tzinfo的一个子类,它的实例对象,通过计算与utc的时差,来定义一个时区。
-
timezone格式: :timezone ( offset , name)
- offset:必须是一个timedelta对象,表示本地时间与utc时间的时差。
- name:参数可选。
-
实例方法:
from datetime import timezone,timedelta,time
a = timezone(timedelta(hours=8))
b = time (12,35,20,tzinfo=a)
b
# 返回
datetime.time(12, 35, 20, tzinfo=datetime.timezone(datetime.timedelta(seconds=28800)))
方法 | 释义 | 示例 | 返回 |
---|---|---|---|
utcoffset | 返回 time / datetime 实例的本地时间与utc的时间间隔 | b.utcoffset() | datetime.timedelta(seconds=28800) |
tzname | 返回time / datetime 实例的utc名称,默认utc | b.tzname() | ‘UTC+08:00’ |
strftime和strptime
-
定义:
- strftime:根据参数,将datetime转化成一个表示日期时间的字符串。
- strptime:根据表示日期时间的字符串返回一个datetime对象。
-
比较描述:
strftime | strptime | |
---|---|---|
用法 | 根据参数,将datetime转化成一个字符串 | 将表示日期时间的字符串转化成datetime对象 |
方法类型 | 实例方法 | 类方法 |
适用类 | time、date、datetime | datetime |
格式 | strftime (format) | strptime (date_str, format) |
- 参数含义:
指令 | 含义 | 示例 |
---|---|---|
%a | 星期几的缩写 | sun,mon,sat |
%A | 星期几的全拼 | Sunday,Monday |
%w | 以0-6分别表示周一至周日 | 0, 1, …, 6 |
%u | 以1-7分别表示周一至周日 | 1, 2, …, 7 |
%U | 以两位数形式展示一年周周的序号(周日为第一天) | 00, 02, …, 53 |
%W | 以两位数形式展示一年周周的序号(周一为第一天) | 00, 02, …, 53 |
%d | 以两位数形式表示一月中日的序号 | 01, 02, …, 31 |
%j | 以三位数形式表示一年中日的序号 | 001, 002, …, 366 |
%b | 月份的缩写 | Jan, Feb, …, Dec |
%B | 月份的全拼 | January, February, …, December |
%m | 以两位数展现月份 | 01, 02, …,12 |
%y | 以两位数展现年份 | 00, 01, …,99 |
%Y | 以四位数展现年份 | 2000, 2001, …,2099 |
%H | 以两位数表示24小时制 | 00, 01, …,23 |
%I | 以两位数表示12小时制 | 01, 02, …,12 |
%p | 本地化的AM,PM | AM, PM |
%M | 以两位数显示分钟 | 00, 02, …,59 |
%S | 以两位数显示秒数 | 00, 02, …,59 |
%f | 以六位数显示微妙 | 000000, 000001, …, 999999 |
%z | UTC 偏移量,(简单型对象则为空字符串) | (空), +0000, -0400, +1030 |
%Z | 时区名称 | (空), UTC, EST, CST |
%c | 本地化的适当日期和时间表示 | Tue Aug 16 21:30:00 1988 |
%x | 本地化的适当日期表示 | 08/16/88 |
%X | 本地化的适当时间表示 | 21:30:00 |
%% | 字面的 ‘%’ 字符 | % |
方法整理
-
标准格式:(自己命名的)
- date: date (year, month, day)
- time: time ( hour, minute, second, microsecond, tzinfo, fold)
- datetime: datetime ( year, month, day, hour, minute, second, microsecond, tzinfo)
-
标准格式转字符串:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
ctime | 返回ctime()样式字符串 | a.ctime() | date、datetime |
isoformat | 返回一个字符串格式的日期 | a.isoformat() | date、datetime、time |
strftime | 根据参数,将datetime转化成一个字符串 | strftime (format) | date、datetime、time |
- 字符串转标准格式:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
fromisoformat | 将一个“yyyy-mm-dd”格式转化为日期格式 | date.fromisoformat(‘2018-09-08’) | date |
datetime.fromisoformat (date_string ) | 根据规定的字符串格式,返回一个datetime对象 | datetime.fromisoformat(‘2015-12-01T12:30:30’) | datetime |
strptime | 将表示日期时间的字符串转化成datetime对象 | strptime (date_str, format) | datetime |
- 标准格式转时间戳:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
timestamp | 返回一个时间戳,与tzinfo信息无关 | dt.timestamp() | datetime |
- 时间戳转标准格式:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
date.fromtimestamp ( timestamp) | 根据给出的时间戳参数,返回一个date日期 | date.fromtimestamp(1596547490) | date |
datetime.fromtimestamp ( timestamp, tzinfo ) | 将时间戳转换成本地日期和时间(tzinfo参数可选) | datetime.fromtimestamp(1293856201.0) | datetime |
datetime.utcfromtimestamp ( timestamp ) | 返回utc的datetime,结果为简单型 | datetime.utcfromtimestamp(1293856201.0) | datetime |
- 标准格式转时间元组:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
timetuple | 返回一个时间元组 | a.timetuple() | date、datetime |
- 日期其他的信息:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
date | 返回具有相同年、月、日的date对象 | dt.date() | datetime |
time | 返回具有相同时、分、秒的time对象 | dt.time() | datetime |
timetz | 返回具有相同时、分、秒、tzinfo信息的感知性 time 对象 | dt1.timetz() | datetime |
weekday | 返回日期是星期几(周一返回0) | a.weekday() | date、datetime |
isoweekday | 返回日期是星期几(周一返回1) | a.isoweekday() | date、datetime |
isocalendar | 返回一个年份,周号,工作日的元组 | a.isocalendar() | date、datetime |
toordinal | 返回日期的格里高利序号 | a.toordinal() | date、datetime |
- 时区、偏移信息
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
tzname | 返回时区的名字 | print(b.tzname()) | time、datetime |
utcoffset | 返回时区的偏移量 | print(b.utcoffset()) | time、datetime |
astimezone ( tz ) | 返回一个具有新的 tzinfo 属性的datetime对象。tz参数可选 | dt1_astimezone | time、datetime |
- 当前日期时间信息:
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
date.today | 返回本地的当前时间 | date.today() | date |
datetime.today | 返回本地的当前时间 | datetime.today() | datetime |
datetime.now ( tzinfo ) | 返回本地的当前时间,tzinfo可选(未指定时和today一样) | datetime.now() | datetime |
datetime,utcnow | 返回当前utc的日期时间 | datetime.utcnow() | datetime |
- 其他函数
方法 | 释义 | 示例 | 适用范围 |
---|---|---|---|
replace() | 根据参数数据替换原对象的相应部分 | dt.replace(day=10,hour=15) | date、datetime、time |
combine ( date, time, tzinfo ) | 将日期,时间参数结合成datetime,tzinfo参数可选 | datetime.combine(date(2015,12,1),time(12,30,30)) | datetime |
date.fromordinal | 按照格里高利序号,返回一个日期 | date.fromordinal(a.toordinal()) | date |
datetime.fromordinal ( ordinal ) | 按照格里高利序号,返回一个日期时间 | datetime |