1、时间的三种表示形式
- 时间戳(timestamp)
- 元组(struct_time)
- 格式化的时间字符串
2、格林尼治和格林威治
格林尼治和格林威治都是Greenwich的音译叫法。
前中国地名委员会办公室与中国地图出版社译名组、新华社译名室共同商议,为促进汉译外国地名以及外来科技术语的标准化、规范化,决定将Greenwich改译为“格林尼治”,舍弃“格林威治”的译法,与天文学界的译名相一致。
3、GMT和UTC
3.1、GMT格林尼治标准时间
- GMT(Greenwich Mean Time)——格林尼治标准时间
- 理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治时)的时间。
3.2、UTC协调世界时
- UTC(Universal TimeCoordinated)——协调世界时
又称世界统一时间、世界标准时间、国际协调时间。 - UTC 这几个字母是英文Coordinated Universal Time 和法语Temp UniverselleCoordinee 的混合体。
- 协调世界时是以原子时秒长为基础在时刻上尽量接近于世界时(UT)的一种时间计量系统,国际原子时的准确度为每日数纳秒,而世界时的准确度为每日数毫秒。协调世界时(UTC)是一种折衷时标,以使时间系统接近于世界时,1972年面世。协调世界时属于“原子物理时间”,它更加精确,基本不会产生误差。
3.3、使用GMT还是UTC
为了方便,在不需要精确到秒的情况下,通常也将GMT 和UTC 视作等同。
4、时间戳
时间戳表示的是从1970年1月1日开始按秒计算的偏移量。
例:
import time
print(time.time()) #返回当前时间的时间戳
输出:
1561729665.5359492
4.1、struct_time转化为时间戳
4.1.1、mktime
将一个struct_time转化为时间戳。
例:
import time
t=time.localtime()
print(time.mktime(t))
输出:
1561733693.0
5、元组(struct_time)
struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
5.1、时间戳转换为struct_time
5.1.1、localtime
- 将一个时间戳转换为当前时区的struct_time
- 不提供参数, 则以当前时间为准
例:
import time
#默认获得本时区的struct_time
print(time.localtime())
print(time.localtime(time.time()))
输出:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=28, tm_hour=21, tm_min=58, tm_sec=16, tm_wday=4, tm_yday=179, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=28, tm_hour=21, tm_min=58, tm_sec=16, tm_wday=4, tm_yday=179, tm_isdst=0)
5.1.2、gmtime
- 将一个时间戳转换为GMT时区(0时区)的struct_time
例:
import time
#默认获得本GMT,0时区的struct_time
print(time.gmtime())
print(time.gmtime(time.time()))
输出:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=28, tm_hour=13, tm_min=58, tm_sec=16, tm_wday=4, tm_yday=179, tm_isdst=0)
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=28, tm_hour=13, tm_min=58, tm_sec=16, tm_wday=4, tm_yday=179, tm_isdst=0)
5.1.3、localtime和gmtime的区别
- locatime是本时区的时间
- gmtime是0时区的时间
例:
import time
print(time.strftime("%Y-%m-%d %X",time.localtime(0)))
print(time.strftime("%Y-%m-%d %X",time.gmtime(0)))
输出:
1970-01-01 08:00:00
1970-01-01 00:00:00
注:中国在东八区,与0时区相差8小时
5.2、将格式化字符串转换为struct_time
5.2.1、strptime
- 把一个格式化时间字符串转化为struct_time。
- 和strftime()是逆操作
例:
import time
print(time.strptime("2019-06-28 23:08:33","%Y-%m-%d %X"))
输出:
time.struct_time(tm_year=2019, tm_mon=6, tm_mday=28, tm_hour=23, tm_min=8, tm_sec=33, tm_wday=4, tm_yday=179, tm_isdst=-1)
6、格式化的时间
6.1、将时间戳转化为格式化的时间
6.1.1、ctime
- 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。
- 如果参数未给或者为None的时候,将会默认time.time()为参数
例:
import time
print(time.ctime())
输出:
Fri Jun 28 22:34:22 2019
6.2、将struct_time转化为格式化的时间
6.2.1、asctime
- 把一个表示时间的元组或者struct_time表示为这种形式:Fri Jun 28 22:28:33 2019
- 如果没有参数,将会将time.localtime()作为参数传入
例:
import time
print(time.asctime())
输出:
Fri Jun 28 22:28:33 2019
6.2.2、strftime
- 把一个代表时间的元组或struct_time转化为格式化的时间字符串
- 如果元组中任何一个元素越界,ValueError的错误将会被抛出。
例:
import time
print(time.strftime("%Y-%m-%d %X",time.localtime()))
输出:
2019-06-28 23:08:33
6.3、格式化时间的符号
符号 | 含义 |
---|---|
%a | 本地的简写工作日名称。 |
%A | 本地的完整工作日名称。 |
%b | 本地简化的月份名称。 |
%B | 本地的完整月份名称。 |
%c | 本地相应的日期和时间表示。 |
%d | 一个十进制数字[01,31]。 |
%H | 小时(24小时制),24小时制,00-23。 |
%I | 小时(12小时制),12小时制,01-12。 |
%j | 一年中的十进制数[001,366]。 |
%m | 月为十进制数[01,12]。 |
%M | 以十进制数分钟[00,59]。 |
%p | 本地am或者pm的相应符。 |
%S | 秒为十进制数[00,61]。 |
%U | 年的星期数(星期日为星期的第一天)为十进制数[00,53]。在第一个星期日之前的新的一年的所有天被认为是在第0周。 |
%w | 工作日为十进制数[0(星期日),6]。 |
%W | 年的星期数(星期一作为星期的第一天)作为十进制数[00,53]。在第一个星期一之前的新的一年中的所有天被认为是在第0周。 |
%x | 语言环境的适当日期表示。 |
%X | 语言环境的适当时间表示。 |
%y | 年,无世纪作为十进制数[00,99]。 |
%Y | 年份以世纪为十进制数。 |
%z | 指示与+ HHMM或-HHMM形式的UTC / GMT的正或负时差的时区偏移,其中H表示十进制小时数字,M表示十进制分数字[-23:59,+23:59]。 |
%Z | 时区名称(如果没有时区,则不包含字符)。 |
%% | 字面值’%'字符。 |
- %p只有与%I配合使用才有效果
- 当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算
6.4、格式化时间的符号
7、其它函数
7.1、sleep
- 系统延迟指定的时间再运行
- 单位为秒
例:
import time
print(time.strftime("%X",time.localtime()))
time.sleep(3) #延迟3秒
print(time.strftime("%X",time.localtime()))
输出:
23:20:17
23:20:20
7.2、clock
- 在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)
- 在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间,即两次时间差。