彻底搞懂Python常用时间库time、datetime与时间格式之间的转换关系

Python项目中很多时候会需要将时间在Datetime格式和TimeStamp格式之间转化,本文将对python中多个时间储存方式、时间模块(如time、datetime、timeit)以及他们之间的转换关系进行详细的梳理和总结。整体梳理后表示图如下:

一,python中储存时间的三种格式

1,时间元组(结构体时间)

共有九个元素组

2,时间戳

时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量

3,格式化时间

已格式化的结构使时间更具可读性。包括自定义格式和固定格式。

二、time库

1,time.time()

创建时间戳
返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

1

2

3

4

5

6

7

import time

# 返回当前时间的时间戳(1970纪元后经过的浮点秒数)。

temp = time.time()

print(temp,type(temp))

# -----out------

# 1567667448.120967 <class 'float'>

2,time.localtime([ sec ])

创建结构体时间 | 将时间戳转换为结构体时间(本地)
格式化时间戳为本地的时间,返回结构体时间。若sec参数未输入,则以当前时间为转换。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import time

# 1,localtime中加入时间戳参数

temp = time.time()

# localtime输入时间戳参数,将时间戳转化为本地时间

locaoltime = time.localtime(temp)

print(locaoltime,type(locaoltime))

time.sleep(3)

# 2,localtime未输入参数时,默认为当时时间

print(time.localtime(),type(time.localtime()))

# -----out------

# time.struct_time(tm_year=2019, tm_mon=9, tm_mday=5, tm_hour=15, tm_min=44, tm_sec=4, tm_wday=3, tm_yday=248, tm_isdst=0) <class 'time.struct_time'>

# time.struct_time(tm_year=2019, tm_mon=9, tm_mday=5, tm_hour=15, tm_min=44, tm_sec=7, tm_wday=3, tm_yday=248, tm_isdst=0) <class 'time.struct_time'>

3,time gmtime([ sec ])

将时间戳转换为结构体时间(0时区)
将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1以来的秒数。其默认值为time.time(),函数返回time.struct_time类型的对象。(struct_time是在time模块中定义的表示时间的对象)。

1

2

3

4

5

6

7

8

9

10

11

import time

temp = time.time()

# localtime输入时间戳参数,将时间戳转化为本地时间

print(time.localtime(temp),type(time.localtime(temp)))

# gmtimee输入时间戳参数,将时间戳转换为UTC时区

print(time.gmtime(temp),type(time.gmtime(temp)))

# -----out------

# time.struct_time(tm_year=2019, tm_mon=9, tm_mday=5, tm_hour=17, tm_min=8, tm_sec=57, tm_wday=3, tm_yday=248, tm_isdst=0) <class 'time.struct_time'>

# time.struct_time(tm_year=2019, tm_mon=9, tm_mday=5, tm_hour=9, tm_min=8, tm_sec=57, tm_wday=3, tm_yday=248, tm_isdst=0) <class 'time.struct_time'>

4,time.strftime(format[, t])

将结构体时间转换为字符串
输入结构体时间,输出为按照输入的格式的字符串

1

2

3

4

5

6

7

import time

# 输入结构体时间,输出为按照输入的格式的字符串

temps = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

print(temps,type(temps))

# -----out------

# 2019-09-05 17:12:34 <class 'str'>

5,time.strptime(string[, format])

将字符串转换为结构体时间
根据指定的格式把一个时间字符串解析为结构体时间。

1

2

3

4

5

6

7

8

9

10

11

12

13

import time

# 输入结构体时间,输出为按照输入的格式的字符串

temps = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())

print(temps,type(temps))

strs = temps

# 输入字符串,按照参数指定格式,输出结构体时间

temps = time.strptime( strs,"%Y-%m-%d %H:%M:%S")

print(temps,type(temps))

# -----out------

# 2019-09-05 16:20:58 <class 'str'>

# time.struct_time(tm_year=2019, tm_mon=9, tm_mday=5, tm_hour=16, tm_min=20, tm_sec=58, tm_wday=3, tm_yday=248, tm_isdst=-1) <class 'time.struct_time'>

6,time mktime(t)

将结构体时间转换为时间戳 接收struct_time对象作为参数,返回用秒数来表示时间的浮点数。
如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError。

1

2

3

4

5

6

7

import time

# 输入结构体时间,返回时间戳

time_temps = time.mktime(time.localtime())

print(time_temps,type(time_temps))

# -----out------

# 1567672723.0 <class 'float'>

7,time.sleep(nums)

推迟执行的秒数,没有任何输出

1

2

3

4

5

6

7

import time

# 推迟执行的秒数,没有任何输出

temp = time.sleep(3)

print(temp,type(temp))

# -----out------

# None <class 'NoneType'>

8,timeit.Timer.timeit([number])

用来计算一个函数平均执行了多少时间

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

# coding=gbk

import timeit

def T1():

    '''表内置属性'''

    li = []

    for i in range(1000):

        li.append(i)

def T2():

    '''列表拼接'''

    li = []

    for i in range(1000):

        li = li + [i]

def T3():

    '''列表推导式'''

    li = [i for i in range(1000)]

def T4():

    '''属性转换'''

    li = list(range(1000))

if __name__ == "__main__":

    test_list = ['T1()','T2()','T3()','T4()']

    for i in test_list:

        timer = timeit.Timer(i,"from __main__ import T1,T2,T3,T4")

        print("%s: %f seconds" % (i,timer.timeit(number=1000)))

三,datetime库

datetime模块包含如下类

1,datetime.date类

表示日期的类,常用的属性有year、month、day。参数都为整数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

import datetime

import time

# 1,以下为两种生成日期的方式,效果一致,返回datetime类型

someday = datetime.date(year=2018, month=1, day=1)

someday = datetime.date(2018, 1, 1)

print(someday,type(someday))

# 2,以规定的格式返回日期,返回字符串类型

temp = someday.strftime('/%Y/%m/%d')

print(temp,type(someday))

# 3,以默认的格式返回日期

print(someday.isoformat())

# 4,获得今天日期,返回datetime类型

temp = datetime.date.today()

print(temp,type(temp))

# 5,根据给定的时间戮,返回一个date对象

temp = datetime.date.fromtimestamp(time.time())

print(temp)

# -----out------

# 2018-01-01 <class 'datetime.date'>

# /2018/01/01 <class 'datetime.date'>

# 2018-01-01

# 2019-09-05 <class 'datetime.date'>

# 2019-09-05

2,datetime.time类

表示时间的类,参数包括hour、minute、second、microsecond。 time类的方法同datetime类。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

import datetime

import time

# 1,以下为两种生成时间的方式,效果一致,返回datetime类型

someday = datetime.time(hour=12,minute=50,second=12,microsecond=10)

someday = datetime.time(12, 50, 12, 10)

print(someday,type(someday))

# 2,以规定的格式返回时间,返回字符串类型

temp = someday.strftime('%H::%M::%S')

print(temp,type(temp))

#

# 3,以默认的格式返回时间

print(someday.isoformat(),type(someday))

# -----out------

# 12:50:12.000010 <class 'datetime.time'>

# 12::50::12 <class 'str'>

# 12:50:12.000010 <class 'datetime.time'>

3,datetime.datetime类

日期实践类,常用的参数包含year、month、day、hour、minute、second、microsecond。但是至少要包含year、month、day三个参数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

import datetime

import time

# 1,以下为两种生成日期时间的方式,效果一致,返回datetime类型

someday = datetime.datetime(year=2018,month=1,day=1,hour=12,minute=50,second=12,microsecond=10)

someday = datetime.datetime(2018, 1, 1, 12, 50, 12, 10)

print(someday,type(someday))

# 2,以规定的格式返回日期时间,返回字符串类型

temp = someday.strftime('%Y-%m-%d %H:%M:%S')

print(temp,type(temp))

# 3,以默认的格式返回日期时间

print(someday.isoformat(),type(someday))

# 4,datetime类.timetuple()将datetime转化为结构体时间;再通过time.mktime()装换为时间戳

dtime = datetime.datetime.now()

print(dtime.timetuple(),type(dtime.timetuple()))

un_time = time.mktime(dtime.timetuple())

print(un_time,type(un_time))

# 5,时间戳转换为python的datetime

times = datetime.datetime.fromtimestamp(un_time)

print(times,type(times))

# 6,将datetime类转换为格式化时间,datetime类.strftime(format).

now_time = datetime.datetime.now()

now_time = now_time.strftime('%Y-%m-%d %H:%M:%S')

print(now_time,type(now_time))

# 7,将格式化时间转换为datetime类,datetime.datetime.strptime(string,format)

d2 = datetime.datetime.strptime(now_time, '%Y-%m-%d %H:%M:%S')

print(d2,type(d2))

# -----out------

# 2018-01-01 12:50:12.000010 <class 'datetime.datetime'>

# 2018-01-01 12:50:12 <class 'str'>

# 2018-01-01T12:50:12.000010 <class 'datetime.datetime'>

# time.struct_time(tm_year=2019, tm_mon=9, tm_mday=6, tm_hour=11, tm_min=13, tm_sec=59, tm_wday=4, tm_yday=249, tm_isdst=-1) <class 'time.struct_time'>

# 1567739639.0 <class 'float'>

# 2019-09-06 11:13:59 <class 'datetime.datetime'>

# 2019-09-06 11:13:59 <class 'str'>

# 2019-09-06 11:13:59 <class 'datetime.datetime'>

4,datetime.timedelta类

表示时间间隔类,给一个时间点加上此类,即可得到一个新的时间。参数包含days、hours、minutes、seconds、microseconds。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

import datetime

# 以下为1天零1小时零1分零1秒又10毫秒的时间间隔

datetime.timedelta(days=1,hours=1,minutes=1,seconds=1,microseconds=10)

datetime.timedelta(1, 3661, 10)

# 以下为35天间隔

datetime.timedelta(days=35)

datetime.timedelta(35)

# 1,当前时间和日期

print(datetime.datetime.now())

# 2,根据指定日期、相隔时间计算出对应目标时间

temp= datetime.datetime.now()-datetime.timedelta(days=67)

print(temp)

print(datetime.datetime.now()-datetime.timedelta(hours=10,days=1))

# -----out------

# 2019-09-05 20:05:30.396688

# 2019-06-30 20:05:30.396688

# 2019-09-04 10:05:30.396688

四,time模块和datetime模块之间的相互转换

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

# coding=utf-8

import time

import datetime

def get_time():

    # 获取当前datetime类型时间

    now_time = datetime.datetime.now()

    # 当前时间减去一天 获得昨天当前时间

    yes_time = now_time + datetime.timedelta(days=-1)

    # 格式化输出

    yes_time_str = yes_time.strftime('%Y-%m-%d %H:%M:%S')

    print (yes_time_str)  # 2017-11-01 22:56:02

def dif_time():

    # 使用datetime类型计算两个时间之间差值

    now_time = datetime.datetime.now()

    now_time = now_time.strftime('%Y-%m-%d %H:%M:%S')

    d1 = datetime.datetime.strptime('2017-10-16 19:21:22', '%Y-%m-%d %H:%M:%S')

    d2 = datetime.datetime.strptime(now_time, '%Y-%m-%d %H:%M:%S')

    #间隔天数

    day = (d2 - d1).days

    #间隔秒数

    second = (d2 - d1).seconds

    print (day)   #17

    print (second)  #13475  注意这样计算出的秒数只有小时之后的计算额 也就是不包含天之间差数

def unix_time():

    #将python的datetime转换为unix时间戳

    dtime = datetime.datetime.now()

    un_time = time.mktime(dtime.timetuple())

    print (un_time) 

    #将unix时间戳转换为python的datetime

    unix_ts = 1509636585.0

    times = datetime.datetime.fromtimestamp(unix_ts)

    print (times)  #2017-11-02 23:29:45

if __name__ == "__main__":

    get_time()

    dif_time()

五,附录

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/265544.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ubuntu下安装SDL

源码下载地址&#xff08;SDL version 2.0.14&#xff09;&#xff1a;https://www.libsdl.org/release/SDL2-2.0.14.tar.gz 将源码包拷贝到系统里 使用命令解压 tar -zxvf SDL2-2.0.14.tar.gz 解压得到文件夹 SDL2-2.0.14 进入文件夹 执行命令 ./configure 执行命令 make…

静态SOCKS5:了解基本概念和协议

SOCKS5是一种网络协议&#xff0c;是SOCKS协议的第五个版本&#xff0c;它提供了一种安全的、加密的网络连接&#xff0c;可以帮助用户在互联网上保护自己的隐私和安全。静态SOCKS5是指使用静态IP地址和端口的SOCKS5代理服务器&#xff0c;这种代理服务器可以提供更稳定、更快速…

解决vue3 动态引入报错问题

之前这样写的&#xff0c;能使用&#xff0c;但是有警告 警告&#xff0c;查了下&#xff0c;是动态引入的问题&#xff0c;看到说要用glob 然后再我的基础上&#xff0c;稍微 改了下&#xff0c;就可以了&#xff1a; 最后打印了下&#xff0c;modules[../../components/flowc…

SPI 通信-stm32入门

本节我们将继续学习下一个通信协议 SPI&#xff0c;SPI 通信和我们刚学完的 I2C 通信差不多。两个协议的设计目的都一样&#xff0c;都是实现主控芯片和各种外挂芯片之间的数据交流&#xff0c;有了数据交流的能力&#xff0c;我们主控芯片就可以挂载并操纵各式各样的外部芯片&…

如何使用cpolar+Inis在Ubuntu系统快速搭建本地博客网站公网可访问

文章目录 前言1. Inis博客网站搭建1.1. Inis博客网站下载和安装1.2 Inis博客网站测试1.3 cpolar的安装和注册 2. 本地网页发布2.1 Cpolar临时数据隧道2.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;2.3.Cpolar稳定隧道&#xff08;本地设置&#xff09; 3. 公网访问测试总…

【数学建模】《实战数学建模:例题与讲解》第九讲-时间序列分析(含Matlab代码)

【数学建模】《实战数学建模&#xff1a;例题与讲解》第九讲-时间序列分析&#xff08;含Matlab代码&#xff09; 基本概念确定性时间序列分析方法平稳时间序列模型ARIMA模型季节性序列 习题8.11. 题目要求2.解题过程3.程序4.结果 习题8.21. 题目要求2.解题过程3.程序4.结果 习…

秋招春招,我没有拿到一个offer怎么办?

无论是秋招&#xff0c;还是春招&#xff0c;对于应届毕业生来说&#xff0c;都是最佳的拿offer的时机&#xff0c;当然错过了也不是绝境&#xff0c;机会无处不在&#xff0c;只是说校招是最好的机会。希望朋友们重视起来&#xff0c;积极的争取到满意的工作岗位。 从竞争的角…

KUKA机器人坐标点如何赋值?

KUKA机器人坐标点如何赋值? KUKA机器人系统中如何实现将某个点位整体赋值给另一个点位呢? 具体的方法可参考以下内容: 如下图所示,选中某个程序,然后点击下方的打开, 如下图所示,进入程序后,这里有P1和P2两个点位,如果要实现让P2的点位和P1的点位完全相同,除了通过示…

el-table表格出现滚动条的时候,内容和表头对不齐

1&#xff0c;在获取表格数据完成后的位置加 this.$nextTick(() > {this.$refs.templateData.doLayout(); })2,要记得在上加上ref <el-table ref"templateData" ></el-table>加完之后的

我的NPI项目之Android 安全系列 -- Android Strongbox 初识

从Android9(Pie)开始,Google强烈建议支持Strongbox. 具体描述如下: 一直到目前的Android14. 对应的内容也一并贴出来: 说人话就是Android开始通过独立于主SoC的单元进行密钥存储了。 通常&#xff0c;这样的单元就是我们通常称作的Secure Element&#xff08;SE&#xff09;&am…

肥猫游戏报价器|计价器|王者荣耀代练陪练等游戏报价器软件介绍说明

目录 1. 前言2. 软件著作权3. 软件使用说明3.1 进入软件3.2 用户登录3.3 首页3.4 报价器3.4.1 总体介绍3.4.2 王者报价器3.4.3 LOL手游报价器3.4.4 英雄联盟报价器3.4.5 云顶之弈报价器3.4.7 王者水晶报价器3.4.8 和平精英报价器3.4.9 蛋仔派对报价器3.4.10 穿越火线报价器3.4.…

MySQL行锁范围分析(行锁、间隙锁、临键锁)

MySQL 中锁的概念 排它锁&#xff08;Exclusive Lock&#xff09; X 锁&#xff0c;也称为写锁&#xff0c;若事务T对对象A加上X锁&#xff0c;则只允许T读取和修改A&#xff0c;其他任何事物都不能再对A 加任何锁&#xff0c;直到T释放A上的锁。 SELECT…FOR UPDATE 对读取的…