time类对象
用于表示一天中的时间部分,它只有2个构造方法,用于构造指定时间的时间对象,并可以对两个时间对象进行大小比较。
一个 time 对象代表某日的(本地)时间,它独立于任何特定日期,并可通过 tzinfo 对象来调整。
构造方法
1、datetime.time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0)
datetime.time()构造方法。
所有参数都是可选的。 tzinfo 可以是 None,或者是一个 tzinfo 子类的实例。 其余的参数必须是在下面范围内的整数:
0 <= hour < 24,
0 <= minute < 60,
0 <= second < 60,
0 <= microsecond < 1000000,
fold in [0, 1].
如果给出一个此范围以外的参数,则会引发 ValueError。 所有参数值默认为 0,只有 tzinfo 默认为 None。
2、time.fromisoformat(time_string)
返回一个对应于以任何有效的 ISO 8601 格式给出的 time_string 的 time,下列格式除外:
时区时差可能会有带小数的秒值。
打头的 T,通常在当日期和时间之间可能存在歧义时才有必要,不是必需的。
带小数的秒值可以有任意多位数码(超过 6 位将被截断)。
带小数的时和分是不受支持的。
类属性
1、time.min早最的可表示 time, time(0, 0, 0, 0)。
2、time.max最晚的可表示 time, time(23, 59, 59, 999999)。
3、time.resolution
两个不相等的 time 对象之间可能的最小间隔,timedelta(microseconds=1),但是请注意 time 对象并不支持算术运算,仅支持比较。
实例属性(只读)
1、time.hour:取值范围range(24)。
2、time.minute:取值范围range(60)。
3、time.second:取值范围range(60)。
4、time.microsecond:取值范围range(1000000)。
5、time.tzinfo
作为 tzinfo 参数被传给 time 构造器的对象,如果没有传入值则为 None。
time.fold取值范围是 [0, 1]。 用于在重复的时间段中消除边界时间歧义。 (当夏令时结束时回拨时钟或由于政治原因导致当明时区的 UTC 时差减少就会出现重复的时间段。) 取值 0 (1) 表示两个时刻早于(晚于)所代表的同一边界时间。
3.6 新版功能.
time 对象支持 time 与 time 的比较,当 a 时间在 b 之前时,则认为 a 小于 b。 如果比较的一方是简单型而另一方是感知型,则如果尝试进行顺序比较将引发 TypeError。 对于相等比较,简单型实例将永远不等于感知型实例。
如果两个比较方都是感知型,且具有相同的 tzinfo 属性,相同的 tzinfo 属性会被忽略并对基本时间值进行比较。 如果两个比较方都是感知型且具有不同的 tzinfo 属性,两个比较方将首先通过减去它们的 UTC 时差(从 self.utcoffset() 获取)来进行调整。 为了防止将混合类型比较回退为基于对象地址的默认比较,当 time 对象与不同类型的对象比较时,将会引发 TypeError,除非比较运算符是 == 或 !=。 在后两种情况下将分别返回 False 或 True。
在 3.3 版更改: 感知型和简单型 time 实例之间的相等比较不会引发 TypeError。
在布尔运算时,time 对象总是被视为真值。
在 3.5 版更改: 在 Python 3.5 之前,如果一个 time 对象代表 UTC 午夜零时则会被视为假值。 此行为被认为容易引发困惑和错误,因此从 Python 3.5 起已被去除。 详情参见 bpo-13936。
示例:
from datetime import time
t = time(8,47,59)
print(t) # 输出:08:47:59
print(t.hour,t.minute,t.second,t.microsecond,t.tzinfo,t.fold) # 输出:8 47 59 0 None 0
print(time.min,time.max,time.resolution) # 输出:00:00:00 23:59:59.999999 0:00:00.000001
例:
from datetime import time
t1 = time.fromisoformat('04:23:01')
print(t1) # 输出:04:23:01
t2 = time.fromisoformat('T04:23:01')
print(t2) # 输出:04:23:01
t3 = time.fromisoformat('T042301')
print(t3) # 输出:04:23:01
t4 = time.fromisoformat('04:23:01.000384')
print(t4) # 输出:04:23:01.000384
t5 = time.fromisoformat('04:23:01,000')
print(t5) # 输出:04:23:01
t6 = time.fromisoformat('04:23:01+04:00')
print(t6) # 输出:04:23:01+04:00
t7 = time.fromisoformat('04:23:01Z')
print(t7) # 输出:04:23:01+00:00
t8 = time.fromisoformat('04:23:01+00:00')
print(t8) # 输出:04:23:01+00:00
3.7 新版功能.
在 3.11 版更改: 在之前版本中,此方法仅支持可由 time.isoformat() 发出的格式。
实例方法
1、time.replace(hour=self.hour, minute=self.minute, second=self.second, microsecond=self.microsecond, tzinfo=self.tzinfo, *, fold=0)
用于替换time对象中原有值为新指定的值。
返回一个具有同样属性值的 time,除非通过任何关键字参数指定了某些属性值。 请注意可以通过指定 tzinfo=None 从一个感知型 time 创建一个简单型 time,而不必转换时间数据。
3.6 新版功能: 增加了 fold 参数。
2、time.isoformat(timespec='auto')
3.6 新版功能: 增加了 timespec 参数。
返回表示为下列 ISO 8601 格式之一的时间字符串:
HH:MM:SS.ffffff,如果 microsecond 不为 0
HH:MM:SS,如果 microsecond 为 0
HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]],如果 utcoffset() 不返回 None
HH:MM:SS+HH:MM[:SS[.ffffff]],如果 microsecond 为 0 并且 utcoffset() 不返回 None
可选参数 timespec 要包含的额外时间组件值 (默认为 'auto')。它可以是以下值之一:
'auto': 如果 microsecond 为 0 则与 'seconds' 相同,否则与 'microseconds' 相同。
'hours': 以两个数码的 HH 格式 包含 hour。
'minutes': 以 HH:MM 格式包含 hour 和 minute。
'seconds': 以 HH:MM:SS 格式包含 hour, minute 和 second。
'milliseconds': 包含完整时间,但将秒值的小数部分截断至毫秒。 格式为 HH:MM:SS.sss。
'microseconds': 以 HH:MM:SS.ffffff 格式包含完整时间。
备注
排除掉的时间部分将被截断,而不是被舍入。
对于无效的 timespec 参数将引发 ValueError。
示例:
from datetime import time
# 创建一个表示当前时间的 time 对象
now = time(9,10,0)
print("原始时间对象:", now) #
输出:原始时间对象: 09:10:00
# 使用 replace() 方法创建一个新的时间对象,将分钟更改为30
new_time = now.replace(minute=30)
print("新时间对象:", new_time)
输出:新时间对象: 09:30:00
3、time.__str__()
用于返回一个time对象的字符串。
对于时间对象 t, str(t) 等价于 t.isoformat()。
例:
from datetime import time
# 创建一个表示当前时间的 time 对象
now = time(9,7,0)
print("对象类型:", type(now),now)
输出:对象类型: <class 'datetime.time'> 09:07:00
# 使用 __str__() 方法将时间对象转换为字符串
time_str = now.__str__()
print("时间字符串:", type(time_str),time_str)
输出:时间字符串: <class 'str'> 09:07:00
4、time.strftime(format)
用于将时间转换为指定格式字符串。
返回一个由显式格式字符串所控制的,代表时间的字符串。 另请参阅 strftime() 和 strptime() 的行为 和 time.isoformat()。
例:
from datetime import time
# 创建一个表示当前时间的 time 对象
now = time(9,10)
print("当前时间对象:", type(now),now)
输出:当前时间对象: <class 'datetime.time'> 09:10:00
# 使用 strftime() 方法将时间对象格式化为字符串
time_str = now.strftime("%H:%M")
print("时间字符串:", type(time_str),time_str)
输出:时间字符串: <class 'str'> 09:10
5、time.__format__(format)
与 time.strftime() 相同。
此方法使得在 格式化字符串字面值 中以及使用 str.format() 时为 time 对象指定格式字符串成为可能。 另请参阅 strftime() 和 strptime() 的行为 和 time.isoformat()。
示例:
import datetime
# 创建一个表示当前时间的 time 对象
now = datetime.datetime.now().time()
print("当前时间对象:", now)
输出:当前时间对象: 09:15:01.803904
# 使用 __format__() 方法将时间对象格式化为字符串
time_str = now.__format__("%H:%M:%S")
print("时间字符串:", time_str) #
输出:时间字符串: 09:15:01
6、time.utcoffset()
用于返回当前时间对于UTC的偏移量。
如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.utcoffset(None),并且在后者不返回 None 或一个幅度小于一天的 a timedelta 对象时将引发异常。
在 3.7 版更改: UTC 时差不再限制为一个整数分钟值。
例:
import datetime
# 创建一个表示当前时间的 time 对象
now = datetime.datetime.now().time()
print("当前时间对象:", now)
输出:当前时间对象: 09:17:12.650906
# 使用 utcoffset() 方法获取与 UTC 的时间差
offset = now.utcoffset()
print("与 UTC 的时间差:", offset)
输出:与 UTC 的时间差: None
7、time.dst()
用于返回夏令时调整的偏移量。
如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.dst(None),并且在后者不返回 None 或者一个幅度小于一天的 timedelta 对象时将引发异常。
在 3.7 版更改: DST 差值不再限制为一个整数分钟值。
例:
import datetime
# 创建一个表示当前时间的 datetime 对象
now = datetime.datetime.now()
print("当前时间:", now)
输出:当前时间: 2023-12-27 09:19:05.756164
# 使用 dst() 方法获取夏令时调整的偏移量
dst_offset = now.dst()
print("夏令时调整的偏移量:", dst_offset)
输出:夏令时调整的偏移量: None
8、time.tzname()
用于返回time对象所在的时区的名称。
如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.tzname(None),如果后者不返回 None 或者一个字符串对象则将引发异常。
例:
import datetime
# 创建一个表示当前时间的 time 对象
now = datetime.datetime.now().time()
print("当前时间对象:", now)
输出:当前时间对象: 09:20:13.973005
# 使用 tzname() 方法获取时区名称
tz_name = now.tzname()
print("时区名称:", tz_name)
输出:时区名称: None
time对象用法示例
1、创建一个特定时刻的时间对象
from datetime import time
# 创建一个指定的时间对象
t = time(9,23,59,3333)
print(t) # 输出:09:23:59.003333
2、时间格式化
from datetime import time
t = time(9,23,59,3333)
# 格式化时间对象
format_t = t.strftime("%H点%M分%S秒")
print(format_t) # 输出:09点23分59秒
3、对两个时间对象大小比较
from datetime import time
t1 = time(9,23,59,3333)
t2 = time(10,33,10)
print(t1 > t2) # 输出:False
4、对两个时间进行加减
time对象不能直接进行加减,需要先转换为datetime对象再操作。
from datetime import time, timedelta, datetime
t1 = time(9,23,59,3333)
print(t1) # 输出:09:23:59.003333
dt = datetime.combine(datetime.today(),t1) # 转换为datetime对象
t2 = dt + timedelta(hours=10)
print(t2) # 输出:2023-12-27 19:23:59.003333