Python标准库datetime库time类详解(4/6)

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

官方文档链接:datetime --- 基本日期和时间类型 — Python 3.12.1 文档

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值