网站建设计划书模板,那种直播软件从哪里下载,jquery网站开发教程,公众号怎么制作流程Python处理时间的对象很多#xff0c;常用的有time、datetime和calendar等。本文对常用的时间对象的使用进行学习。在开始学习具体的对象前#xff0c;先学习几个计算机的时间概念。
UTC#xff08;全球标准时间#xff09;:是全球范围内计时的科学标准#xff0c;它基于…Python处理时间的对象很多常用的有time、datetime和calendar等。本文对常用的时间对象的使用进行学习。在开始学习具体的对象前先学习几个计算机的时间概念。
UTC全球标准时间:是全球范围内计时的科学标准它基于精心维护的原子钟在全球范围内精确到微秒由于英文CUT和法文TUC的缩写不同作为妥协简称UTC。作为全球最精确的时间系统天文学家、航海家、“太空跟踪网”(DSN) 以及其他科学性学科都使用它,它的参考点是英国格林威治标准时间GMT地球本初子午线的午夜也是 UTC 的午夜 (00:00:00.000000)。本地时间是根据地球上不同时区所处的位置调整 UTC 得来的比如当美国加州的太平洋时间为正午12:00:00 时UTC 为 20:00:00。 夏令时DST:表示为了节约能源 人为规定时间的意思。也叫夏时制夏时令Daylight Saving TimeDST又称日光节约时制和夏令时间”在这一制度实行期间所采用的统一时间称为“夏令时间”。一般在天亮早的夏季人为将时间调快一小时可以使人早起早睡减少照明量以充分利用光照资源从而节约照明用电。各个采纳夏时制的国家具体规定不同。全世界有近110个国家每年要实行夏令时。
感知型”和“简单型”对象日期和时间对象可以根据它们是否包含时区信息而分为“感知型”和“简单型”两类。充分掌握应用性算法和政治性时间调整信息例如时区和夏令时的情况下一个 感知型 对象就能相对于其他感知型对象来精确定位自身时间点。 感知型对象是用来表示一个没有解释空间的固定时间点。简单型对象没有包含足够多的信息来无歧义地相对于其他 date/time 对象来定位自身时间点。
时间戳Unix时间戳是从1970年1月1日UTC/GMT的午夜开始所经过的秒数不考虑闰秒。 Unix时间戳英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp
import time
time.time()
1625483470.3409266datetime模块概览
datetime 模块中的常用类即date、datetime、time、timedelta、timezone、tzinfo。其中date、datetime、time三个类有非常相似的属性和方法。
datetime模块中常用的对象 对象 描述 类型 MAXYEAR 9999指能支持的最大年份 int MINYEAR 1指能支持的最小年份 int date 简单型日期常用的属性有year, month, day type datetime 表示日期时间的类常用的属性有hour, minute, second, microsecond type datetime_CAPI 后面详细描述 PyCapsule 类 sys 各种系统信息 module类 time 表示时间的类包含属性hour、minute、second、microsecond 、tzinfo type timedelta 表示时间间隔即两个时间点的间隔。在日期上做天days小时hour分钟秒毫秒微妙的时间计算 type timezone 表示时区的类 type tzinfo 时区的相关信息 type datetime.date
语法
datetime.date(year, month, day)
参数
year年份、month月份及day日期所有参数都是必要的 参数必须是在下面范围内的整数MINYEAR year MAXYEAR1 month 121 day 给定年月对应的天数
import datetime
t datetime.date(2019,8,26)
print(type(t))
print(t.day,t.month,t.year) # class datetime.date
26 8 2019主要属性
date.min、date.max、date.resolution
date.min:最小日期
date.max:最大日期
date.resolution: 两个日期对象的最小间隔
from datetime import dateprint(date.min) #0001-01-01
print(date.max) #9999-12-31
print(date.resolution) #1 day, 0:00:00date.year、date.month、date.day
分别是年、月、日
from datetime import datetoday date.today()
print(f{today.year})
print(f{today.month})
print(f{today.day})‘’’
today.year2023
today.month9
today.day7
‘’’主要方法
获取今天日期
classmethod date.today()
返回当前的本地日期等价于date.fromtimestamp(time.time())。
from datetime import date
date.today()
datetime.date(2021, 7, 4)时间戳转换为date
classmethod date.fromtimestamp(timestamp)
返回对应于POSIX时间戳的当地时间例如 time.time() 返回的就是时间戳。注意 unix时间戳是从1970年1月1日UTC/GMT的午夜开始所经过的秒数不考虑闰秒。
from datetime import date
date.fromtimestamp(1339119900000/1e3).strftime(%Y-%m-%d %H:%M)
2012-06-07 00:00
date.fromtimestamp(1339120800000/1e3).strftime(%Y-%m-%d %H:%M)
2012-06-07 00:00字符串与date的相互转换
date.fromisoformat(date_string)
返回一个对应于以 YYYY-MM-DD 格式给出的 date_string 的 date 对象
from datetime import date
date.fromisoformat(2019-12-04)
datetime.date(2019, 12, 4)
date.fromisoformat(20191204)
datetime.date(2019, 12, 4)
date.fromisoformat(2021-W01-1)
datetime.date(2021, 1, 4)
这是 date.isoformat() 的逆操作。 它只支持 YYYY-MM-DD 格式。 更通用的要用strptime
d.isoformat()
2002-03-11__str__()也是等价于date.isoformat()
from datetime import date
date(2021, 10, 1).__str__()
2021-10-01str(date(2021, 10, 1))
2021-10-01日期格式化
date.strftime(format)
将给定格式的日期时间对象转换为字符串
import datetimedtdatetime.date(2021, 10, 1)#创建一个日期对象
dt.strftime(%Y-%m-%d)
2021-10-01dt.strftime(%Y年%m月%d日)
2021年10月01日dt.strftime(%Y//%m//%d)
2021//10//01dt.strftime(%Y-%m-%d %H:%M)
2021-10-01 00:00dt.strftime(%A, %d. %B %Y %I:%M%p)
Friday, 01. October 2021 12:00AM__format__()与 date.strftime() 相同。
格式化代码
以下列表显示了 1989 版 C 标准所要求的全部格式代码它们在带有标准 C 实现的所有平台上均可用。 指令 含意 示例 备注 %a 当地工作日的缩写。 Sun, Mon, ..., Sat (en_US); So, Mo, ..., Sa (de_DE) (1) %A 本地化的星期中每日的完整名称。 Sunday, Monday, ..., Saturday (en_US); Sonntag, Montag, ..., Samstag (de_DE) (1) %w 以十进制数显示的工作日其中0表示星期日6表示星期六。 0, 1, ..., 6 %d 补零后以十进制数显示的月份中的一天。 01, 02, ..., 31 (9) %b 当地月份的缩写。 Jan, Feb, ..., Dec (en_US); Jan, Feb, ..., Dez (de_DE) (1) %B 本地化的月份全名。 January, February, ..., December (en_US); Januar, Februar, ..., Dezember (de_DE) (1) %m 补零后以十进制数显示的月份。 01, 02, ..., 12 (9) %y 补零后以十进制数表示的不带世纪的年份。 00, 01, ..., 99 (9) %Y 十进制数表示的带世纪的年份。 0001, 0002, ..., 2013, 2014, ..., 9998, 9999 (2) %H 以补零后的十进制数表示的小时24 小时制。 00, 01, ..., 23 (9) %I 以补零后的十进制数表示的小时12 小时制。 01, 02, ..., 12 (9) %p 本地化的 AM 或 PM 。 AM, PM (en_US); am, pm (de_DE) (1), (3) %M 补零后以十进制数显示的分钟。 00, 01, ..., 59 (9) %S 补零后以十进制数显示的秒。 00, 01, ..., 59 (4), (9) %f 微秒作为一个十进制数零填充到 6 位。 000000, 000001, ..., 999999 (5) %z UTC 偏移量格式为 ±HHMM[SS[.ffffff]] 如果是简单型对象则为空字符串。 (空), 0000, -0400, 1030, 063415, -030712.345216 (6) %Z 时区名称如果对象为简单型则为空字符串。 (空), UTC, GMT (6) %j 以补零后的十进制数表示的一年中的日序号。 001, 002, ..., 366 (9) %U 以补零后的十进制数表示的一年中的周序号星期日作为每周的第一天。 在新的一年中第一个星期日之前的所有日子都被视为是在第 0 周。 00, 01, ..., 53 (7), (9) %W 以补零后的十进制数表示的一年中的周序号星期一作为每周的第一天。 在新的一年中第一个星期一之前的所有日子都被视为是在第 0 周。 00, 01, ..., 53 (7), (9) %c 本地化的适当日期和时间表示。 Tue Aug 16 21:30:00 1988 (en_US); Di 16 Aug 21:30:00 1988 (de_DE) (1) %x 本地化的适当日期表示。 08/16/88 (None); 08/16/1988 (en_US); 16.08.1988 (de_DE) (1) %X 本地化的适当时间表示。 21:30:00 (en_US); 21:30:00 (de_DE) (1) %% 字面的 % 字符。 %
为了方便起见还包括了C89标准不需要的其他一些指令。这些参数都对应于ISO 8601日期值。 指令 含意 示例 备注 %G 带有世纪的 ISO 8601 年份表示包含大部分 ISO 星期 (%V) 的年份。 0001, 0002, ..., 2013, 2014, ..., 9998, 9999 (8) %u 以十进制数显示的 ISO 8601 星期中的日序号其中 1 表示星期一。 1, 2, ..., 7 %V 以十进制数显示的 ISO 8601 星期以星期一作为每周的第一天。 第 01 周为包含 1 月 4 日的星期。 01, 02, ..., 53 (8), (9)
这些代码可能不是在所有平台上都可与 strftime() 方法配合使用。 替换日期
date.replace(yearself.year, monthself.month, dayself.day)
返回被替换了年、月、日的日期如果都没指定参数返回一个具有同样值的日期
from datetime import date
d date(2002, 12, 31)
d.replace(day26)
#datetime.date(2002, 12, 26)转换C标准格式
date.timetuple(d)
返回一个 time.struct_time即 time.localtime() 所返回的类型。hours, minutes 和 seconds 值均为 0且 DST 旗标值为 -1
d date(2002, 12, 31)
date.timetuple(d)
time.struct_time(tm_year2002, tm_mon12, tm_mday31,
tm_hour0, tm_min0, tm_sec0, tm_wday1, tm_yday365,
tm_isdst-1)date.ctime()
返回一个表示日期的字符串在原生 C ctime() 函数 (time.ctime() 会发起调用该函数但 date.ctime() 则不会) 遵循 C 标准的平台上。
from datetime import date
date(2021, 10, 1).ctime()
Fri Oct 1 00:00:00 2021date.ctime() 等效于 time.ctime(time.mktime(d.timetuple()))
ddate(2021, 10, 1)
import time
time.ctime(time.mktime(d.timetuple()))
Fri Oct 1 00:00:00 2021星期几
date.weekday()
返回一个整数代表星期几星期一为0星期天为6。例如 date(2002, 12, 4).weekday() 2表示的是星期三。 date.isoweekday()
返回一个整数代表星期几星期一为1星期天为7。
print(f{date(2023,9,7).weekday()}) #date(2023,9,7).weekday()3
print(f{date(2023,9,7).isoweekday()}) #date(2023,9,7).weekday()4支持的运算 运算 结果 date2 date1 timedelta date2 将为 date1 之后的 timedelta.days 日。 (1) date2 date1 - timedelta 计算 date2 的值使得 date2 timedelta date1。 (2) timedelta date1 - date2 (3) date1 date2 如果 date1 的时间在 date2 之前则认为 date1 小于 date2 。 (4)
注释
如果 timedelta.days 0 则 date2 将在时间线上前进如果 timedelta.days 0 则将后退。 操作完成后 date2 - date1 timedelta.days。 timedelta.seconds 和 timedelta.microseconds 会被忽略。 如果 date2.year 将小于 MINYEAR 或大于 MAXYEAR 则会引发 OverflowError。timedelta.seconds 和 timedelta.microseconds 会被忽略。此值完全精确且不会溢出。 操作完成后 timedelta.seconds 和 timedelta.microseconds 均为 0并且 date2 timedelta date1。 日期比较时如果两个值不都是日期会引发 TypeError。
在布尔运算中所有 date 对象都会被视为真值。
import time
from datetime import date
today date.today()
today
datetime.date(2007, 12, 5)
today date.fromtimestamp(time.time())
True
my_birthday date(today.year, 6, 24)
if my_birthday today:my_birthday my_birthday.replace(yeartoday.year 1)
my_birthday
datetime.date(2008, 6, 24)
time_to_birthday abs(my_birthday - today)
time_to_birthday.days
202 datetime.time
一个 time 对象代表某日的本地时间它独立于任何特定日期并可通过 tzinfo 对象来调整。
语法
datetime.time(hour0, minute0, second0, microsecond0, tzinfoNone, *, fold0)
所有参数都是可选的tzinfo 可以是 None或者是一个 tzinfo 子类的实例。 其余的参数必须是在下面范围内的整数0 hour 240 minute 600 second 600 microsecond 1000000fold in [0, 1] 主要属性
time.min、time.max、time.resolution
分别是最小、最大时间、最小时间间隔
from datetime import timeprint(f{time.min})
print(f{time.max})
print(f{time.resolution})# time.mindatetime.time(0, 0)
# time.maxdatetime.time(23, 59, 59, 999999)
# time.resolutiondatetime.timedelta(microseconds1)time.hour、time.minute、time.second、time. microsecond
分别标识时间对象的小时、分钟、秒和毫秒
from datetime import timet0 time(18,26,31,100)print(f{t0.hour})
print(f{t0.minute})
print(f{t0.second})
print(f{t0.microsecond})# t0.hour18
# t0.minute26
# t0.second31
# t0.microsecond100时区time.tzinfo
返回时区信息 time.fold 主要方法
字符串与time转换
time.isoformat(timespecauto)
格式化为标准时间的字符串
from datetime import time
t time(hour12, minute34, second56, microsecond123456)
t.isoformat()
12:34:56.123456t.isoformat(timespecminutes)
12:34dt time(hour12, minute34, second56, microsecond0)
dt.isoformat(timespecmicroseconds)
12:34:56.000000dt.isoformat(timespecauto)
12:34:56按标准格式从字符串转换为time
time.fromisoformat(time_string) 返回对应于 time.isoformat() 所提供的某种 time_string 格式的 time。 特别地此函数支持以下格式的字符串HH[:MM[:SS[.fff[fff]]]][HH:MM[:SS[.ffffff]]]
time.fromisoformat(04:23:01)datetime.time(4, 23, 1)time.fromisoformat(04:23:01.000384)
datetime.time(4, 23, 1, 384)time.fromisoformat(04:23:0104:00)
datetime.time(4,23,1, tzinfodatetime.timezone(datetime.timedelta(seconds14400)))__str__()
str(t) 等价于 t.isoformat() time.strftime(format)
时间转换为字符串返回一个由显式格式字符串所指明的代表时间的字符串
from datetime import time
t time(hour12, minute3, second56)
t.strftime(%H:%M:%S)
#用:分隔
12:03:56
#用%分隔
t.strftime(%H%%%M%%%S)
12%03%56__format__()
与 time.strftime() 相同 替换时间
time.replace(hourself.hour, minuteself.minute, secondself.second,
microsecondself.microsecond, tzinfoself.tzinfo, *, fold0)
返回指定替换的时间如果都没指定返回同样时间的值
t time(hour12, minute34, second56, microsecond123456)
t.replace(hour23, minute12,)
datetime.time(23, 12, 56, 123456)datetime.datetime
datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。
class datetime.datetime(year, month, day, hour0, minute0, second0, microsecond0, tzinfoNone, *, fold0)
year, month 和 day 参数是必须的。 tzinfo 可以是 None 或者是一个 tzinfo 子类的实例。 其余的参数必须是在下面范围内的整数
MINYEAR year MAXYEAR,1 month 12,1 day 指定年月的天数,0 hour 24,0 minute 60,0 second 60,0 microsecond 1000000,fold in [0, 1].
如果参数不在这些范围内则抛出 ValueError 异常。
主要属性
支持date和time的全部属性。 主要方法
获取当日时间
classmethod datetime.today()
返回表示当前地方时的 datetime 对象其中 tzinfo 为 None。
等价于
datetime.fromtimestamp(time.time())
classmethod datetime.now(tzNone)
返回表示当前地方时的 date 和 time 对象。
如果可选参数 tz 为 None 或未指定这就类似于 today()但该方法会在可能的情况下提供比通过 time.time() 时间戳所获时间值更高的精度例如在提供了 C gettimeofday() 函数的平台上就可以做到这一点。
如果 tz 不为 None它必须是 tzinfo 子类的一个实例并且当前日期和时间将被转换到 tz 时区。
此函数可以替代 today() 和 utcnow()。
classmethod datetime.utcnow()
返回表示当前 UTC 时间的 date 和 time其中 tzinfo 为 None。
这类似于 now()但返回的是当前 UTC 日期和时间类型为简单型 datetime 对象。 感知型的当前 UTC 日期时间可通过调用 datetime.now(timezone.utc) 来获得。
由于简单型 datetime 对象会被许多 datetime 方法当作本地时间来处理最好是使用感知型日期时间对象来表示 UTC 时间。 因此创建表示当前 UTC 时间的对象的推荐方式是通过调用 datetime.now(timezone.utc)。
时间戳与datetime转换
classmethod datetime.fromtimestamp(timestamp, tzNone)
返回 POSIX 时间戳对应的本地日期和时间如 time.time() 返回的。 如果可选参数 tz 指定为 None 或未指定时间戳将转换为平台的本地日期和时间并且返回的 datetime 对象将为简单型。
如果 tz 不为 None它必须是 tzinfo 子类的一个实例并且时间戳将被转换到 tz 指定的时区。
fromtimestamp() 可能会引发 OverflowError如果时间戳数值超出所在平台 C localtime() 或 gmtime() 函数的支持范围的话并会在 localtime() 或 gmtime() 报错时引发 OSError。 通常该数值会被限制在 1970 年至 2038 年之间。 请注意在时间戳概念包含闰秒的非 POSIX 系统上闰秒会被 fromtimestamp() 所忽略结果可能导致两个相差一秒的时间戳产生相同的 datetime 对象。 相比 utcfromtimestamp() 更推荐使用此方法。
在 3.3 版更改: 引发 OverflowError 而不是 ValueError如果时间戳数值超出所在平台 C localtime() 或 gmtime() 函数的支持范围的话。 并会在 localtime() 或 gmtime() 出错时引发 OSError 而不是 ValueError。
classmethod datetime.utcfromtimestamp(timestamp)
返回对应于 POSIX 时间戳的 UTC datetime其中 tzinfo 值为 None。 结果为简单型对象。
这可能引发 OverflowError如果时间戳数值超出所在平台 C gmtime() 函数的支持范围的话并会在 gmtime() 报错时引发 OSError。 通常该数值会被限制在 1970 至 2038 年之间。
要得到一个感知型 datetime 对象应调用 fromtimestamp():
datetime.fromtimestamp(timestamp, timezone.utc) 在 POSIX 兼容的平台上它等价于以下表达式:
datetime(1970, 1, 1, tzinfotimezone.utc) timedelta(secondstimestamp) 不同之处在于后一种形式总是支持完整年份范围从 MINYEAR 到 MAXYEAR 的开区间。
警告 由于简单型 datetime 对象会被许多 datetime 方法当作本地时间来处理最好是使用感知型日期时间对象来表示 UTC 时间。 因此创建表示特定 UTC 时间戳的日期时间对象的推荐方式是通过调用 datetime.fromtimestamp(timestamp, tztimezone.utc)。 在 3.3 版更改: 引发 OverflowError 而不是 ValueError如果时间戳数值超出所在平台 C gmtime() 函数的支持范围的话。 并会在 gmtime() 出错时引发 OSError 而不是 ValueError。
datetime.timestamp()
将datetime类型转换为时间戳。
组合时间和日期
classmethod datetime.combine(date, time, tzinfoself.tzinfo)
将日期和时间对象组合成一个datetime对象。
任意的 datetime object d d datetime.combine(d.date(), d.time(), d.tzinfo).
字符串与datetime的转换
classmethod datetime.fromisoformat(date_string)
将datetime转换为标准字符串
from datetime import datetime
datetime.fromisoformat(2011-11-04)
datetime.datetime(2011, 11, 4, 0, 0)
datetime.fromisoformat(20111104)
datetime.datetime(2011, 11, 4, 0, 0)
datetime.fromisoformat(2011-11-04T00:05:23)
datetime.datetime(2011, 11, 4, 0, 5, 23)
datetime.fromisoformat(2011-11-04T00:05:23Z)
datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfodatetime.timezone.utc)
datetime.fromisoformat(20111104T000523)
datetime.datetime(2011, 11, 4, 0, 5, 23)
datetime.fromisoformat(2011-W01-2T00:05:23.283)
datetime.datetime(2011, 1, 4, 0, 5, 23, 283000)
datetime.fromisoformat(2011-11-04 00:05:23.283)
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
datetime.fromisoformat(2011-11-04 00:05:23.28300:00)
datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfodatetime.timezone.utc)
datetime.fromisoformat(2011-11-04T00:05:2304:00)
datetime.datetime(2011, 11, 4, 0, 5, 23,tzinfodatetime.timezone(datetime.timedelta(seconds14400)))
classmethod datetime.strptime(date_string, format) datetime.timedelta
timedelta 对象表示两个 date 或者 time 的时间间隔
class datetime.timedelta(days0, seconds0, microseconds0, milliseconds0, minutes0, hours0, weeks0)
所有参数都是可选的并且默认为 0。 这些参数可以是整数或者浮点数也可以是正数或者负数。
只有 days, seconds 和 microseconds 会存储在内部。 参数单位的换算规则如下
1毫秒会转换成1000微秒。1分钟会转换成60秒。1小时会转换成3600秒。1星期会转换成7天。
日期、秒、微秒都是标准化的所以它们的表达方式也是唯一的例
0 microseconds 10000000 seconds 3600*24 (一天的秒数)-999999999 days 999999999
from datetime import timedelta
delta timedelta(days50,seconds27,microseconds10,milliseconds29000,minutes5,hours8,weeks2
)
# Only days, seconds, and microseconds remain
delta
datetime.timedelta(days64, seconds29156, microseconds10)
在有任何参数为浮点型并且 microseconds 值为小数的情况下从所有参数中余下的微秒数将被合并并使用四舍五入偶不入奇的规则将总计值舍入到最接近的整数微秒值。 如果没有任何参数为浮点型的情况下则转换和标准化过程将是完全精确的不会丢失信息。
如果标准化后的 days 数值超过了指定范围将会抛出 OverflowError 异常。
请注意对负数值进行标准化的结果可能会令人感到惊讶。 例如:
from datetime import timedelta
d timedelta(microseconds-1)
(d.days, d.seconds, d.microseconds)
(-1, 86399, 999999)
主要的属性 timedelta.days、timedelta.seconds、timedelta.microseconds
时间间隔的天数、秒数和微妙数。 主要的方法
timedelta.total_seconds()
返回时间间隔包含了多少秒。
from datetime import timedelta
year timedelta(days1)
timedelta.total_seconds(year)
86400.0 支持的运算 运算 结果 t1 t2 t3 t2 和 t3 的和。 运算后 t1-t2 t3 and t1-t3 t2 必为真值。(1) t1 t2 - t3 t2 减 t3 的差。 运算后 t1 t2 - t3 and t2 t1 t3 必为真值。 (1)(6) t1 t2 * i or t1 i * t2 乘以一个整数。运算后假如 i ! 0 则 t1 // i t2 必为真值。 In general, t1 * i t1 * (i-1) t1 is true. (1) t1 t2 * f or t1 f * t2 乘以一个浮点数结果会被舍入到 timedelta 最接近的整数倍。 精度使用四舍五偶入奇不入规则。 f t2 / t3 总时间 t2 除以间隔单位 t3 (3)。 返回一个 float对象。 t1 t2 / f or t1 t2 / i 除以一个浮点数或整数。 结果会被舍入到 timedelta 最接近的整数倍。 精度使用四舍五偶入奇不入规则。 t1 t2 // i or t1 t2 // t3 计算底数其余部分如果有将被丢弃。在第二种情况下将返回整数。 3 t1 t2 % t3 余数为一个 timedelta 对象。(3) q, r divmod(t1, t2) 通过 : q t1 // t2 (3) and r t1 % t2 计算出商和余数。q是一个整数r是一个 timedelta 对象。 t1 返回一个相同数值的 timedelta 对象。 -t1 等价于 timedelta(-t1.days, -t1.seconds, -t1.microseconds), 和 t1* -1. (1)(4) abs(t) 当 t.days 0 时等于 t, 当 t.days 0 时 -t 。 (2) str(t) 返回一个形如 [D day[s], ][H]H:MM:SS[.UUUUUU] 的字符串当 t 为负数的时候 D 也为负数。 (5) repr(t) 返回一个 timedelta 对象的字符串表示形式作为附带正规属性值的构造器调用。 tzinfo对象、timezone对象
tzinfo是一个抽象基类也就是说该类不应被直接实例化指示特定时区的信息。
datetime 模块提供了 timezone这是 tzinfo 的一个简单实体子类它能以与 UTC 的固定差值来表示不同的时区例如 UTC 本身或北美的 EST 和 EDT。
timezone 类是 tzinfo 的子类它的每个实例都代表一个以与 UTC 的固定时差来定义的时区。
此类的对象不可被用于代表某些特殊地点的时区信息这些地点在一年的不同日期会使用不同的时差或是在历史上对民用时间进行过调整。
class datetime.timezone(offset, nameNone) offset 参数必须指定为一个 timedelta 对象表示本地时间与 UTC 的时差。 它必须严格限制于 -timedelta(hours24) 和 timedelta(hours24) 之间否则会引发 ValueError。
name 参数是可选的。 如果指定则必须为一个字符串它将被用作 datetime.tzname() 方法的返回值。
import datetime
dt datetime.datetime(2022, 9, 10, 1, 21, 32, 676435)
tm datetime.timezone(datetime.timedelta(hours 2), name CET)
dt dt.astimezone(tm)
print(CET:, dt)
print(UTC Offset:, tm.utcoffset(None))
print(Name of the Timezone:, tm.tzname(None))
print(DST: , tm.dst(None))
print(From UTC:, tm.fromutc(dt))‘’
CET: 2022-09-10 03:21:32.67643502:00
UTC Offset: 2:00:00
Name of the Timezone: CET
DST: None
From UTC: 2022-09-10 05:21:32.67643502:00
‘
上面的代码首先创建了一个datetime 对象并使用timezone 类声明了一个时区。我们声明CET它是UTC02:00 。
接下来使用datetime 对象上可用的astimezone() 我们创建了一个有时间区的日期时间对象。我们使用tzinfo 抽象类所包含的、在timezone 类中实现的所有四个方法。
由于没有关于日照周期的细节dst() 方法返回None 。