python标准库time 和datetime
1.time模块
1.1 time模块简介
在Python中,通常有这几种方式来表示时间:
- 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型的时间戳。
- 格式化的时间字符串(Format String)
- 结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
如下所示:
import time#-------当前时间为准的三种形式的时间
print(time.time()) # 时间戳:1631616128.24815
print(time.strftime("%Y-%m-%d %X")) #格式化的时间字符串:'2021-09-14 18:42:08'
print(time.localtime()) #本地时区的struct_time对象:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=14, tm_hour=18, tm_min=42, tm_sec=8, tm_wday=1, tm_yday=257, tm_isdst=0)
print(time.gmtime()) #UTC时区的struct_time对象:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=14, tm_hour=10, tm_min=42, tm_sec=8, tm_wday=1, tm_yday=257, tm_isdst=0)
1.2 time模块常用函数
import time#1.time.time() → float
#返回时间戳。以浮点数表示的从 epoch 开始的秒数的时间值。
print(time.time())#输出:1631689353.428093
#2.time.gmtime([secs])
#将以自 epoch 开始的秒数表示的时间转换为 UTC 的 struct_time ,其中 dst 标志始终为零。
# 如果未提供 secs 或为 None ,则使用 time() 所返回的当前时间。 一秒以内的小数将被忽略。
print(time.gmtime())#输出time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=6, tm_min=40, tm_sec=59, tm_wday=2, tm_yday=258, tm_isdst=0)
print(time.gmtime(1631689353.428093))#将时间戳转换为struct_time对象
#3.time.localtime([secs])
#与 gmtime() 相似但转换为当地时间。如果未提供 secs 或为 None ,则使用由 time() 返回的当前时间。当 DST 适用于给定时间时,dst标志设置为 1 。
print(time.localtime())#输出:time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=14, tm_min=42, tm_sec=8, tm_wday=2, tm_yday=258, tm_isdst=0)
print(time.localtime(1631689353.428093))#将时间戳转换为struct_time对象
#4.time.asctime([t])
# 转换由 gmtime() 或 localtime() 所返回的表示时间的元组或 struct_time 为以下形式的字符串: 'Sun Jun 20 23:21:05 1993'。
#日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun 9 04:26:40 1993'。
#如果未提供 t,则会使用 localtime() 所返回的当前时间。
print(time.asctime())#输出:Wed Sep 15 14:32:48 2021
#5.time.ctime([secs])
#转换以距离初始纪元的秒数表示的时间为以下形式的字符串: 'Sun Jun 20 23:21:05 1993' 代表本地时间。
# 日期字段的长度为两个字符,如果日期只有一个数字则会以零填充,例如: 'Wed Jun 9 04:26:40 1993'。
#如果 secs 未提供或为 None,则使用 time() 所返回的当前时间。 ctime(secs) 等价于 asctime(localtime(secs))。
print(time.ctime())#输出:Wed Sep 15 14:38:50 2021
#6.time.mktime(t)
#这是 localtime() 的反函数。它的参数是 struct_time 或者完整的 9 元组(因为需要 dst 标志;如果它是未知的则使用 -1 作为dst标志),它表示 local 的时间,而不是 UTC 。
# 它返回一个浮点数,以便与 time() 兼容。如果输入值不能表示为有效时间,则 OverflowError 或 ValueError 将被引发(这取决于Python或底层C库是否捕获到无效值)。它可以生成时间的最早日期取决于平台。
print(time.mktime(time.localtime()))#将struct_time表示的时间转换为时间戳表示的时间:1631688229.0
#7.time.sleep(secs)
#调用该方法的线程将被暂停执行 secs 秒。参数可以是浮点数,以表示更为精确的睡眠时长。
#8.time.strftime(format[, t])
#转换一个元组或 struct_time 表示的由 gmtime() 或 localtime() 返回的时间到由 format 参数指定的字符串。如果未提供 t ,则使用由 localtime() 返回的当前时间。
# format 必须是一个字符串。如果 t 中的任何字段超出允许范围,则引发 ValueError 。
#以下指令可以嵌入 format 字符串中。它们显示时没有可选的字段宽度和精度规范,并被 strftime() 结果中的指示字符替换:
#指令 意义 注释
#%a 本地化的缩写星期中每日的名称。
#%A 本地化的星期中每日的完整名称。
#%b 本地化的月缩写名称。
#%B 本地化的月完整名称。
#%c 本地化的适当日期和时间表示。
#%d 十进制数 [01,31] 表示的月中日。
#%H 十进制数 [00,23] 表示的小时(24小时制)。
#%I 十进制数 [01,12] 表示的小时(12小时制)。
#%j 十进制数 [001,366] 表示的年中日。
#%m 十进制数 [01,12] 表示的月。
#%M 十进制数 [00,59] 表示的分钟。
#%p 本地化的 AM 或 PM 。 (1)
#%S 十进制数 [00,61] 表示的秒。 (2)
#%U 十进制数 [00,53] 表示的一年中的周数(星期日作为一周的第一天)。在第一个星期日之前的新年中的所有日子都被认为是在第 0 周。(3)
#%w 十进制数 [0(星期日),6] 表示的周中日。
#%W 十进制数 [00,53] 表示的一年中的周数(星期一作为一周的第一天)。 在第一个星期一之前的新年中的所有日子被认为是在第 0 周。(3)
#%x 本地化的适当日期表示。
#%X 本地化的适当时间表示。
#%y 十进制数 [00,99] 表示的没有世纪的年份。
#%Y 十进制数表示的带世纪的年份。
#%z 时区偏移以格式 +HHMM 或 -HHMM 形式的 UTC/GMT 的正或负时差指示,其中H表示十进制小时数字,M表示小数分钟数字 [-23:59, +23:59] 。
#%Z 时区名称(如果不存在时区,则不包含字符)。
#%% 字面的 '%' 字符。
#注释:
#1.当与strptime() 函数一起使用时,如果使用 %I 指令来解析小时, %p 指令只影响输出小时字段。
#2.范围真的是 0 到 61 ;值 60 在表示 leap seconds 的时间戳中有效,并且由于历史原因支持值 61 。
#3.当与 strptime() 函数一起使用时, %U 和 %W 仅用于指定星期几和年份的计算。
print(time.strftime('%Y-%m-%d %X'))#2021-09-15 15:15:14
print(time.strftime('%Y-%m-%d %w %H:%M:%S',time.localtime()))#2021-09-15 3 15:17:22
#9.time.strptime(string[, format])
#根据格式解析表示时间的字符串。 返回值为一个被 gmtime() 或 localtime() 返回的 struct_time 。
#format 参数使用与 strftime() 相同的指令。 它默认为匹配 ctime() 所返回的格式 "%a %b %d %H:%M:%S %Y"` 。
# 如果 string 不能根据 format 来解析,或者解析后它有多余的数据,则会引发 ValueError。
# 当无法推断出更准确的值时,用于填充任何缺失数据的默认值是 (1900, 1, 1, 0, 0, 0, 0, 1, -1) 。 string 和 format 都必须为字符串。
print(time.strptime('2021-09-15 3 15:15:14','%Y-%m-%d %w %H:%M:%S'))#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=15, tm_min=15, tm_sec=14, tm_wday=2, tm_yday=258, tm_isdst=-1)
View Code
1.3 三种时间表示之间的转换方式
2.datetime模块
2.1 datetime 模块的date对象
date对象代表一个理想化的简单型日期,它假设当今的公历在过去和未来永远有效。 属性: year, month, and day。
date对象的常用方法如下:
#1. date.today()返回表示当前的本地日期的date对象today = datetime.date.today()
#2. 自己传参数实例化date对象
d = datetime.date(2021,9,14)
print(today.__dir__())
#['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__',
# '__ge__', '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'fromtimestamp', 'fromordinal', 'today',
# 'ctime', 'strftime', '__format__', 'timetuple', 'isocalendar', 'isoformat', 'isoweekday', 'toordinal', 'weekday',
# 'replace', '__reduce__', 'year', 'month', 'day', '__doc__', 'min', 'max', 'resolution', '__setattr__', '__delattr__',
# '__init__', '__reduce_ex__', '__subclasshook__', '__init_subclass__', '__sizeof__', '__dir__', '__class__']
print(today.day,today.month,today.year)#15 9 2021
#3. date.fromtimestamp(timestamp)返回对应于 POSIX 时间戳的当地时间,例如 time.time() 返回的就是时间戳。
print(today.fromtimestamp(1631611105.0))#2021-09-14
#4. date.timetuple()返回一个 time.struct_time,即 time.localtime() 所返回的类型。
print(today.timetuple())#time.struct_time(tm_year=2021, tm_mon=9, tm_mday=15, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=258, tm_isdst=-1)
#5. date.weekday()返回一个整数代表星期几,星期一为0,星期天为6。
print(today.weekday())#2
#6. date.isoweekday()返回一个整数代表星期几,星期一为1,星期天为7。
print(today.isoweekday())#3
#7. date.isocalendar()返回一个由三部分组成的 named tuple 对象: year, week 和 weekday。
print(today.isocalendar())#(2021, 37, 3)
#8. date.isoformat()返回一个以 ISO 8601 格式 YYYY-MM-DD 来表示日期的字符串:
print(today.isoformat())#2021-09-15
#9 date.ctime()返回一个表示日期的字符串:
print(today.ctime())#"Wed Sep 15 00:00:00 2021"
#10 date.strftime(format)#返回一个由显式格式字符串所指明的代表日期的字符串。
print(today.strftime('%Y/%m/%d'))#2021/09/15
View Code
2.2 datetime 模块的datetime对象
datetime 对象是包含来自 date 对象和 time 对象的所有信息的单一对象。与 date 对象一样,datetime 假定当前的格列高利历向前后两个方向无限延伸;与 time 对象一样,datetime 假定每一天恰好有 3600*24 秒。
import datetime#一、datetime类 包含的常用类方法
#1. datetime.today()返回表示当前地方时的 datetime 对象,其中 tzinfo 为 None。等价于:datetime.fromtimestamp(time.time())
today = datetime.datetime.today()
print(today.__dir__())
#['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__',
# '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'now', 'utcnow', 'fromtimestamp', 'utcfromtimestamp',
# 'strptime', 'combine', 'date', 'time', 'timetz', 'ctime', 'timetuple', 'timestamp', 'utctimetuple', 'isoformat',
# 'utcoffset', 'tzname', 'dst', 'replace', 'astimezone', '__reduce_ex__', '__reduce__', 'hour', 'minute', 'second',
# 'microsecond', 'tzinfo', 'fold', '__doc__', 'min', 'max', 'resolution', 'fromordinal', 'today', 'strftime', '__format__',
# 'isocalendar', 'isoweekday', 'toordinal', 'weekday', 'year', 'month', 'day', '__setattr__', '__delattr__', '__init__',
# '__subclasshook__', '__init_subclass__', '__sizeof__', '__dir__', '__class__']
#2. datetime.now(tz=None) 返回表示当前地方时的 date 和 time 对象
#如果可选参数 tz 为 None 或未指定,这就类似于 today(),但该方法会在可能的情况下提供比通过 time.time() 时间戳所获时间值更高的精度(例如,在提供了 C gettimeofday() 函数的平台上就可以做到这一点)。
#如果 tz 不为 None,它必须是 tzinfo 子类的一个实例,并且当前日期和时间将被转换到 tz 时区。
d = datetime.datetime.now()
print(d.__dir__())
# ['__repr__', '__hash__', '__str__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__',
# '__add__', '__radd__', '__sub__', '__rsub__', '__new__', 'now', 'utcnow', 'fromtimestamp', 'utcfromtimestamp', 'strptime',
# 'combine', 'date', 'time', 'timetz', 'ctime', 'timetuple', 'timestamp', 'utctimetuple', 'isoformat', 'utcoffset', 'tzname',
# 'dst', 'replace', 'astimezone', '__reduce_ex__', '__reduce__', 'hour', 'minute', 'second', 'microsecond', 'tzinfo', 'fold',
# '__doc__', 'min', 'max', 'resolution', 'fromordinal', 'today', 'strftime', '__format__', 'isocalendar', 'isoweekday',
# 'toordinal', 'weekday', 'year', 'month', 'day', '__setattr__', '__delattr__', '__init__', '__subclasshook__', '__init_subclass__',
# '__sizeof__', '__dir__', '__class__']
#3. datetime.utcnow()返回表示当前 UTC 时间的 date 和 time,其中 tzinfo 为 None。
#这类似于 now(),但返回的是当前 UTC 日期和时间,类型为简单型 datetime 对象。 感知型的当前 UTC 日期时间可通过调用 datetime.now(timezone.utc) 来获得。
d = datetime.datetime.utcnow()
print(d.__dir__())#输出同上
#4. datetime.fromtimestamp(timestamp, tz=None)返回对应于 POSIX 时间戳例如 time.time() 的返回值的本地日期和时间。 如果可选参数 tz 为 None 或未指定,时间戳会被转换为所在平台的本地日期和时间,返回的 datetime 对象将为天真型。
#如果 tz 不为 None,它必须是 tzinfo 子类的一个实例,并且时间戳将被转换到 tz 指定的时区。
#5.datetime.utcfromtimestamp(timestamp)返回对应于 POSIX 时间戳的 UTC datetime,其中 tzinfo 值为 None。(结果为简单型对象。)
#在 POSIX 兼容的平台上,它等价于以下表达式:datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
#6.datetime.combine(date, time, tzinfo=self.tzinfo)返回一个新的 datetime 对象,对象的日期部分等于给定的 date 对象的值,而其时间部分等于给定的 time 对象的值。 如果提供了 tzinfo 参数,
# 其值会被用来设置结果的 tzinfo 属性,否则将使用 time 参数的 tzinfo 属性。
#对于任意 datetime 对象 d,d == datetime.combine(d.date(), d.time(), d.tzinfo)。 如果 date 是一个 datetime 对象,它的时间部分和 tzinfo 属性会被忽略。
#二、datetime类包含的常用类属性
#datetime.min、datetime.max、datetime.resolution、datetime.year、datetime.month、datetime.day、datetime.hour、datetime.minute、datetime.second
#datetime.microsecond、datetime.tzinfo
#三、datetime类包含的常用实例方法
#1.datetime.date() 返回具有同样 year, month 和 day 值的 date 对象。
today = datetime.datetime.today()
print(today.date())#2021-09-17
#2.datetime.time() 返回具有同样 hour, minute, second, microsecond 和 fold 值的 time 对象。 tzinfo 值为 None。
today = datetime.datetime.today()
print(today.time())#14:51:28.209801
#3.datetime.timetz()返回具有同样 hour, minute, second, microsecond, fold 和 tzinfo 属性性的 time 对象。
#4.datetime.astimezone(tz=None)
#返回一个具有新的 tzinfo 属性 tz 的 datetime 对象,并会调整日期和时间数据使得结果对应的 UTC 时间与 self 相同,但为 tz 时区的本地时间。
#5.datetime.tzname()
#如果 tzinfo 为 None,则返回 None,否则返回 self.tzinfo.tzname(self),如果后者不返回 None 或者一个字符串对象则将引发异常。
#6.datetime.timetuple()
#返回一个 time.struct_time,即 time.localtime() 所返回的类型。
#7.datetime.timestamp()
#返回对应于 datetime 实例的 POSIX 时间戳。 此返回值是与 time.time() 返回值类似的 float 对象。
#8.datetime.ctime()返回一个表示日期和时间的字符串
from datetime import datetime
print(datetime(2002, 12, 4, 20, 30, 40).ctime())#Wed Dec 4 20:30:40 2002
View Code
from datetime import datetime,date,time,timezone#1.Using datetime.combine()
>>> d = date(2005,7,14)
>>> t = time(12,30)
>>> datetime.combine(d,t)
datetime.datetime(2005, 7, 14, 12, 30)
#2.Using datetime.now()
>>> datetime.now()
datetime.datetime(2021, 9, 17, 15, 14, 28, 733398)
>>> datetime.now(timezone.utc)
datetime.datetime(2021, 9, 17, 7, 15, 16, 676705, tzinfo=datetime.timezone.utc)
#3.Using datetime.strptime()>>> dt = datetime.strptime("21/11/06 16:30","%d/%m/%y %H:%M")
>>> dt
datetime.datetime(2006, 11, 21, 16, 30)
#4.Using datetime.timetuple() to get tuple of all attributes
dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
tt = dt.timetuple()
for item in tt:
print(item)
#5.date in ISO format
>>> ic = dt.isocalendar()
>>> for it in ic:
... print(it)
...
2006
47
2
#6. Formatting a datetime
>>> dt.strftime("%A, %d. %B %Y %I:%M%p")
'Tuesday, 21. November 2006 04:30PM'
示例
>>>待续
以上是 python标准库time 和datetime 的全部内容, 来源链接: utcz.com/z/387266.html