python标准库time 和datetime

python

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

回到顶部