python常用时间库time、datetime与时间格式之间的转换教程
作者:TFATS 发布时间:2023-05-03 01:24:37
本文将对python中多个时间储存方式、时间模块(如time、datetime、timeit)以及他们之间的转换关系进行详细的梳理和总结。整体梳理后表示图如下:
一,python中储存时间的三种格式
1,时间元组(结构体时间)
共有九个元素组
2,时间戳
时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
3,格式化时间
已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
二、time库
1,time.time()
创建时间戳
返回当前时间的时间戳(1970 * 后经过的浮点秒数)。
import time
# 返回当前时间的时间戳(1970 * 后经过的浮点秒数)。
temp = time.time()
print(temp,type(temp))
# -----out------
# 1567667448.120967 <class 'float'>
2,time.localtime([ sec ])
创建结构体时间 | 将时间戳转换为结构体时间(本地)
格式化时间戳为本地的时间,返回结构体时间。若sec参数未输入,则以当前时间为转换。
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模块中定义的表示时间的对象)。
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])
将结构体时间转换为字符串
输入结构体时间,输出为按照输入的格式的字符串
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])
将字符串转换为结构体时间
根据指定的格式把一个时间字符串解析为结构体时间。
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。
import time
# 输入结构体时间,返回时间戳
time_temps = time.mktime(time.localtime())
print(time_temps,type(time_temps))
# -----out------
# 1567672723.0 <class 'float'>
7,time.sleep(nums)
推迟执行的秒数,没有任何输出
import time
# 推迟执行的秒数,没有任何输出
temp = time.sleep(3)
print(temp,type(temp))
# -----out------
# None <class 'NoneType'>
8,timeit.Timer.timeit([number])
用来计算一个函数平均执行了多少时间
# 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。参数都为整数。
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类。
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三个参数。
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。
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模块之间的相互转换
# 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()
五,附录
总结
来源:https://blog.csdn.net/TFATS/article/details/103871445


猜你喜欢
- 另外他们列出的这些区别有些是蛮有意义的,有些可能由于他们本人的MySQL DBA的身份,对Oracle的理解有些偏差,有些则有凑数的嫌疑.
- python matplotlib画图产生的Type 3 fonts字体不兼容更改措施:使用Type 42字体来生成PostScript 和
- 什么是restREST是所有Web应用都应该遵守的架构设计指导原则。Representational State Transfer,翻译是”
- file--->setting,选择Editor--->python如下图所示:补充: Pycharm配置显示空格在P
- 一、进入pycharm二、步骤1、开始点击pycharm左上角的file,找到python interpreter,点击右边的设置(长得像齿
- 我们在使用Golang时,不可避免会遇到异常情况的处理,与Java、Python等语言不同的是,Go中并没有try...catch...这样
- 本文实例讲述了Python设计模式之代理模式。分享给大家供大家参考,具体如下:代理模式在一般形式上是一个类函数接口。代理可以是这些事物的接口
- 正常的页面跳转的api大家应该都清楚,但是涉及到多页面来回跳转以及返回到导航页的时候就需要一些技巧来进行处理,之前找了挺多文章也没有很详细的
- 导语记得很久以前写过一些中国大学MOOC上的视频下载器,不过好像都已经年久失修了。正好最近有需要,所以重新写了一个,顺便上来分享一波,寒假大
- 1.简介: SQL Server 2005中的窗口函数帮助你迅速查看不同级别的聚合,通过它可以非常方便地累计总数、移动平均值、以及执行其它计
- Python支持四种不同的数值类型,包括int(整数)long(长整数)float(浮点实际值)complex (复数),本文章向码农介绍p
- 如下所示:import picklewith open(filename, 'rb') as f: datadict = p
- 如果你在 ForeignKey或 ManyToManyField字段上使用 related_name属性,你必须总是为该字段指定一个唯一的反
- python开发中经常遇到报错的情况,但是warning通常并不影响程序的运行,而且有时特别讨厌,下面我们来说下如何忽略warning错误。
- K近邻法是有监督学习方法,原理很简单,假设我们有一堆分好类的样本数据,分好类表示每个样本都一个对应的已知类标签,当来一个测试样本要我们判断它
- VScode编辑器在安装好Python插件之后会自动选择环境变量中排序最高的那一个解释器作为默认解释器,而想要额外添加新的Python解释器
- Go反射的实现和 interface 和 unsafe.Pointer 密切相关。如果对golang的 interface 底层实现还没有理
- Selenium 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE
- 在用Python绘制红楼梦词云图文章中讲到我们使用Python把红楼梦中的核心词汇给绘画出来了,但是,红楼梦这么唯美的书,给我们乌漆麻黑的搞
- * 对子查询和Join进行了优化,包括对MyISAD和InnoB存储引擎分散范围内的批量索引访问。* 增加了 BACKUP DATABASE