Python 常用自带 libraries - 日期时间
Python 常用自带 libraries - 日期时间
1 时间 time
1.1 time.struct_time() 时间数据类型
初始化:一般不直接初始化
属性:
-
tm_year,tm_mon1 ~ 12 之间,tm_mday1 ~ 31 之间, -
tm_hour,tm_min,tm_sec, 均在 0 ~ 59 之间 -
tm_wday: 在一星期中星期为第几天,在 0 ~ 6 之间,周一为 0 -
tm_yday: 在一年中为第几天,在 1 ~ 366 之间 -
tm_isdst: 0, 1 或 -1 -
tm_zone: 时区名称的缩写 -
tm_gmtoff: 以秒为单位的UTC以东偏离
1.2 时间的几种表示形式
以下函数,如果不传入参数,则默认以本地时间作为传入
-
time.time():-> float;local time -
time.time_nc():-> int;nanoseconds (= 1e9 seconds);local time -
time.gmtime(secs):float -> time.struct_time;默认为(不传入参数)当前的 UTC time -
time.localtime(secs):float -> time.struct_time;默认为(不传入参数)当前的 local time传入相同的
secs,time.localtime(secs) 与 time.gmtime(secs) 始终存在时区时间差。
不同表示形式之间的转换
-
time.ctime(secs):float -> str;默认为(不传入参数)当前的 local time-
如
Sat Feb 12 19:42:52 2022 -
等价于
time.asctime(time.localtime(secs))
-
-
time.asctime(t):time.struct_time -> str -
time.mktime(t):time.struct_time -> float;默认为(不传入参数)当前的 local time- 相当于
time.ctime()的逆函数
- 相当于
测试实例
import time
print('time:', time.time(), '[type]:', type(time.time()))
print('time_ns:', time.time_ns(), '[type]:', type(time.time_ns()), time.time_ns() * 1e-9)
print('gmtime:', time.gmtime(), '[type]:', type(time.gmtime()))
print('localtime:', time.localtime(), '[type]:', type(time.localtime()))
print('ctime:', time.ctime(), '[type]:', type(time.ctime()))
print('asctime:', time.asctime(), '[type]:', type(time.asctime()))
1.3 统计程序运行时间
以下 3 个函数均返回为 float 类型,单位为 second
-
time.time():系统时间,如果在两次调用之间,将系统时间回调,会导致第二次调用的时间小于第一次 -
time.perf_counter():一般用此函数测试程序运行时间,包括time.sleep()的时间 -
time.process_time():不包括time.sleep()的时间
与之对应的 3 个 nanoseconds 函数,返回为 int 类型
time.time_ns(),time.perf_counter_ns(),time.process_time_ns()
测试实例
import time
t1, t2, t3 = time.time(), time.perf_counter(), time.process_time()
[1.**1. for i in range(int(1e6))]
time.sleep(2.)
print('time:', time.time() - t1)
print('perf_counter:', time.perf_counter() - t2)
print('process_time:', time.process_time() - t3)
# output
# time: 2.070873260498047
# perf_counter: 2.0581983
# process_time: 0.0625
1.4 time.strptime() 和 time.strftime()
-
time.strptime(str[, format]):返回time.struct_time类型;将字符串(依据format)解析为time.struct_time时间 -
time.strftime(format[, t]):返回str类型;将time.struct_time时间按指定的format转换为字符串format: 地址
注意:与 datetime.strftime() 不同的是,time.strftime() 未提供 %f (millisecond)的格式
参考资料
[1] Python time.strftime() 方法, RUNOOM, 地址
2. 日期 date
to be completed...
3. 日期时间 datetime
3.1 数据类型
-
-
初始化:
datetime.datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None, *, fold=0) -
属性:
year,month,day,hour,minute,second,microsecond, 和tzinfo -
datetime.datetime()运算:两个datetime()实例之差为timedelta()实例,两个datetime()实例无法相加。
-
-
datetime.timedelta()类-
用于时间的加减,如计算某个时刻(
datetime()实例)多长时间(timedelta()实例)之后/之前的时刻 -
初始化:
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0) -
属性:
days,seconds, 和microseconds -
方法:
timedelta.total_seconds()返回总秒数
-
3.2 常用函数
-
datetime.fromtimestamp(timestamp, tz=None):float -> datetime.datetime; 根据时间戳(timestamp)建立datetime.datetime()类timestamp:单位为 second
-
获取当前日期时间
-
datetime.datetime.now()当地时间(Local Time) -
datetime.datetime.utcnow()UTC时间 -
datetime.datetime.today()等价于
datetime.fromtimestamp(time.time())
均返回
datetime.datetime()类 -
datatime() 实例格式化输出方法
-
datetime.strftime()方法,格式化datatime()实例-
自定义输出日期时间的格式
-
返回
str类型 -
传入字符串格式定义 地址
-
-
datetime.isoformat(sep='T', timespec='auto')方法-
ISO 标准格式化时间
-
返回
str类型 -
参数
sep:日期与时间之间的分隔符 -
参数
timespec:以下字符串类型:-
'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 格式包含完整时间。
-
-
测试例子
import datetime
t = datetime.datetime.now() # datetime.datetime() 类型
print(t.isoformat(sep=' ', timespec='milliseconds')) # str 类型
print(t.strftime('%Y-%m-%d %H:%M:%S.%f')) # str 类型
# output: 2022-02-12 18:48:47.632
# output: 2022-02-12 18:48:47.632679
# 可以看出 isoformat() 是截断到3位数字而不是四舍五入
实用例子
1. 将 second 转换为 HH:MM:SS.FFF 的格式
import datetime
# seconds 不能超过 1 day,否者 hour 会从 0 开始计数
# milliseconds 超出的小数会直接舍去
def Secs2Time(secs=0):
# secs: seconds
if secs >= 86400: # secs 不能超过一天
return None
dt = datetime.datetime.fromtimestamp(secs, datetime.timezone.utc)
# 设置为 UTC 时区,从 00:00:00 开始
s = dt.strftime('%H:%M:%S.%f')[:-3]
return s
等价于如下函数:
import datetime
# seconds 超过 1 day 会记录在 hour 中 (hour > 24)
# milliseconds 超出的小数会四舍五入
def Secs2Time2(secs):
# secs: seconds
sec = int(secs) # 整数部分
ms = round(1000 * (secs - int(secs))) # 小数部分
m, s = divmod(sec, 60)
h, m = divmod(m, 60)
time_str = '{0:0>2d}:{1:0>2d}:{2:0>2d}.{3:0>3d}'.format(h, m, s, ms)
return time_str

浙公网安备 33010602011771号