在Python中,通常有这几种方式来表示时间:
时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
格式化的时间字符串(Format String)
结构化的时间(struct_time):struct_time元组共有9个元素共九个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时)
实例:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Author : darren
"""
"""
import time
a = time.time() #
b = time.strftime('%Y-%m-%d %X %p')
c = time.strftime('%Y-%m-%d %H:%M:%S')
d = time.localtime() #结构化时间
print(a)
print(b)
print(c)
print('结构化时间:',d)
# print(d.tm_year) #单独得到特定值
#datatime模块
import datetime
a = datetime.datetime.now()
print('datetime时间:', a)
#计算三天后是什么时间
b = datetime.datetime.now() + datetime.timedelta(days=3)
print('计算三天后是什么时间',b)
#时间之间的转换
print('---------------------时间之间的转换----------------------')
#需求:当前得到一个格式化字符串的时间数据:2020-05-03 15:48:16 。在这个时间的基础加算7天后是什么时间
t1 = '2020-05-03 15:48:16'
t = '%Y-%m-%d %H:%M:%S'
print('当前时间:',t1)
t2 = time.strptime(t1,t)
t3 = time.mktime(t2)
t4 = t3 + 7*24*3600
#再转回去
t5 = time.localtime(t4)
t6 = time.strftime(t, t5)
print('最后得到7天后的时间是:',t6)
#整个思路================
#第一步:
struct_time = time.strptime('2020-05-03 15:48:16', '%Y-%m-%d %H:%M:%S') #这里转成结构化时间
timestamp = time.mktime(struct_time) + 7*24*3600 #这里得到最后7点后的时间戳的时间
#第二步:转回去
res = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(timestamp))
print('最后得到7天后的时间是:',res)
执行结果:
1588514427.7860322
2020-05-03 22:00:27 PM
2020-05-03 22:00:27
结构化时间: time.struct_time(tm_year=2020, tm_mon=5, tm_mday=3, tm_hour=22, tm_min=0, tm_sec=27, tm_wday=6, tm_yday=124, tm_isdst=0)
datetime时间: 2020-05-03 22:00:27.792943
计算三天后是什么时间 2020-05-06 22:00:27.792975
---------------------时间之间的转换----------------------
当前时间: 2020-05-03 15:48:16
最后得到7天后的时间是: 2020-05-10 15:48:16
最后得到7天后的时间是: 2020-05-10 15:48:16
以上例子产要依据下图的原理,其中计算机认识的时间只能是'时间戳'格式,而程序员可处理的或者说人类能看懂的时间有: '格式化的时间字符串','结构化的时间' ,于是有了下图的转换关系
#--------------------------按图2转换时间
# asctime([t]) : 把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。
# 如果没有参数,将会将time.localtime()作为参数传入。
print(time.asctime())#Sun Sep 11 00:43:43 2016
# ctime([secs]) : 把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为
# None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
print(time.ctime()) # Sun Sep 11 00:46:38 2016
print(time.ctime(time.time())) # Sun Sep 11 00:46:38 2016
datatime模块
#时间加减
import datetime
# print(datetime.datetime.now()) #返回 2016-08-19 12:47:03.941925
#print(datetime.date.fromtimestamp(time.time()) ) # 时间戳直接转成日期格式 2016-08-19
# print(datetime.datetime.now() )
# print(datetime.datetime.now() + datetime.timedelta(3)) #当前时间+3天
# print(datetime.datetime.now() + datetime.timedelta(-3)) #当前时间-3天
# print(datetime.datetime.now() + datetime.timedelta(hours=3)) #当前时间+3小时
# print(datetime.datetime.now() + datetime.timedelta(minutes=30)) #当前时间+30分
#
# c_time = datetime.datetime.now()
# print(c_time.replace(minute=3,hour=2)) #时间替换
执行结果:
2020-05-03 22:09:34.487423
2020-05-03
2020-05-03 22:09:34.487438
2020-05-06 22:09:34.487443
2020-04-30 22:09:34.487450
2020-05-04 01:09:34.487456
2020-05-03 22:39:34.487464
2020-05-03 02:03:34.487471