TOC

Python time

相关阅读:

本文主要是说 time 库。
参考文档:https://docs.python.org/2/library/time.html

三种时间格式

  • 时间戳
  • timetuple
  • 时间字符串
time.time()  # float
time.struct_time(...)  # timetuple

time.struct_time(tm_year=2014, tm_mon=1, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=4, tm_yday=31, tm_isdst=0)
# .tm_zone   时区名称   中国:中国标准时间
# .tm_gmtoff 时区(秒) 中国:28800

相互转换

flowchart LR

timestamp(时间戳)
timetuple(timetuple)
timestr(时间字符串)

timestamp --localtime/gmtime--> timetuple
timetuple --mktime--> timestamp
timetuple --strftime/asctime--> timestr
timestr --strptime--> timetuple

补充:

# 可以直接从时间戳到字符串,不过是固定的格式,和 asctime 一样
time.ctime(time.time())  # 'Fri Jan 31 00:00:00 2014'

# 获取当前时间戳
datetime.datetime.now().timestamp()

# timetuple -> 时间戳
calendar.timegm(timetuple)

strftime / strptime

%Y-%m-%d %H:%M:%S  // yyyy-mm-dd hh:mm:ss
%a, %d %b %Y %H:%M:%S %Z  // Fri, 31 Jan 2014 00:00:00 中国标准时间

其他函数

# 系统时间
time.time()  # float
time.time_ns()  # int

# 单调时钟,不受系统时钟拨动的影响,更适合用来计算执行时间
time.monotonic()  # float
time.monotonic_ns()  # int

# 当前进程运行时间(CPU 时间,不包括休眠)
time.process_time()
time.process_time_ns()

# 当前线程运行时间(CPU 时间,不包括休眠)
time.thread_time()
time.thread_time_ns()

# 性能计数器时间(原理不清楚)
# 和 monotonic 类似,但是更高的精度
time.perf_counter()
time.perf_counter_ns()

a1, b1 = time.perf_counter(), time.monotonic()  # 267634.4686157, 267629.359
a2, b2 = time.perf_counter(), time.monotonic()  # 267641.2355833, 267636.125
a2 - a1, b2 - b1  # 6.7669675999786705, 6.76600000000326

time.struct_time(...)  # timetuple
time.sleep()

# 'monotonic': time.monotonic()
# 'perf_counter': time.perf_counter()
# 'process_time': time.process_time()
# 'thread_time': time.thread_time()
# 'time': time.time()
time.get_clock_info(name)

几个常量:

time.daylight   # 0/1 是否夏令时(DST)时区
time.tzname     # tuple(str, str) 当前 DST 时区,本地 DST 时区名称
time.timezone   # int 本地非 DST 时区偏移(秒)。Asia/Shanghai 是 -28800 (3600 * 8)
time.altzone    # int 本地 DST 时区偏移(秒)。Asia/Shanghai 是 -32400 (3600 * 9)
  1. timezone, altzone 可以理解成换算 UTC 时间时的增减值。
  2. 这几个值和 tzset 方法有关。