时间的3中表示格式,以及之间的互转:
在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:
(1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
(2)格式化的时间字符串(Format String): ‘2018-04-18’
(3)元组(struct_time) :struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天等)
用处:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
首先看下,datetime的使用
import datetime
date = datetime.datetime.now()
print(date)
输出结果为: datetime.datetime(2018, 10, 11, 11, 47, 6, 549749)
将输入的数字转化为日期(datetime.date)
只需要将想转化为日期的年份、月份和日期放入datetiem.date()的括号中,用逗号分隔。
datetime.date(2018, 10, 11)
输出结果为:datetime.date(2018, 10, 11)。
同样用法的还有datetime.time(),就是将数字转换为时间。
格式化时间
strdate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S)
print(strdate)
输出结果:'2018-10-11 11:49:49'
strdate = datetime.datetime.now().strftime("%Y-%m-%d %H:%M")
print(strdate)
输出结果:'2018-10-11 11:52'
strdate = datetime.datetime.now().strftime("%Y%m%d")
print(strdate)
输出结果:'20181011'
多加一天
addday = (datetime.datetime.now()+datetime.timedelta(days=1)).strftime("%Y-%m-
%d %H:%M:%S")
print(addday)
输出结果: '2018-10-12 12:57:34'
多加一小时
addhour = (datetime.datetime.now()+datetime.timedelta(hours=1)).strftime("%Y-%m-
%d %H:%M:%S")
print(addhour)
输出结果: '2018-10-11 12:59:59'
多加一分钟:
addhour = (datetime.datetime.now()+datetime.timedelta(minutes=1)).strftime("%Y-%m-
%d %H:%M:%S")
print(addhour)
输出结果:'2018-10-11 12:02:34'
转化
time模块
时间戳-->格式化-->字符串
import time
_now = time.time() # 时间戳
struct_time = time.localtime(_now) # 时间戳转化成格式化的时间
time.strftime("%Y-%m-%d %X", struct_time) # 2018-04-21 22:44:53
字符串-->格式化-->时间戳
str_time = '2018-04-18 08:00:00'
struct_time2 = time.strptime(str_time,'%Y-%m-%d %H:%M:%S') # 字符串转格式化
timestamp = time.mktime(struct_time2) # 格式化转时间戳
datetime模块
时间戳 --> 格式化--> 字符型
timestamp1 = 1509636585.0 # 2018-04-21 23:47:02.886948
# 时间戳转化为格式化(datetime类型)时间
struct_time = datetime.datetime.fromtimestamp(1509636585.0) # 类型:<class 'datetime.datetime'>
# 格式化转化为字符串类型
str_time = datetime.datetime.strftime(struct_time,'%Y-%m-%d %H:%M:%S') # 2017-11-02 23:29:45
字符型 -->格式化 --> 时间戳
str_time1 = '2017-11-02 23:29:45'
# 字符串-->格式化
struct_time = datetime.datetime.strptime(str_time1,'%Y-%m-%d %H:%M:%S')
# 格式化-->时间戳
time_stamp = time.mktime(struct_time.timetuple()) # 1509636585.0
时间之间的计算
# 时间之间的间隔
# 1.时间延迟、提前的计算
now =datetime.datetime.now()
# 明天这时候
tomorrow_now = now + datetime.timedelta(days=1)
# 昨天这时候
yes_now = now + datetime.timedelta(days=-1)
# 2.两个时间的差值
days = (tomorrow_now - yes_now).days # 2