时间戳和日期相互转化
一. time模块
time模块里是一些函数
1.1 时间戳
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示
- time.time() 获取当前时间戳
import time # 引入time模块
ticks = time.time()
print "当前时间戳为:", ticks
输出结果为:
当前时间戳为: 1532159373.01
1.2 时间间隔
- 时间间隔是以秒为单位的浮点小数
1.3 格式化时间
上述时间戳对人来说是不友好的,所以有时候需要转换为一定的格式方便人理解。我们可以调用 time.strftime() 函数来达到这个目的(string format time),即字符串格式的时间
- 这个方法需要两个参数,其中第一个是时间格式,第二个是一个9元组.第二个参数可选,默认为 time.localtime() 的返回值。而那个9元组其实是 struct_time,由9个元素组成的元组(tuple),也是一种时间表示的格式。
- 其中,九元祖的后三个分别是:weekday(0-6),在一年中的第几天(1-366),是否是夏令时(默认-1)
如下是把时间戳转换为当前时间
time.time()
,time.localtime(ticks)
,time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
import time # 引入time模块
ticks = time.time()
print "当前时间戳为:", ticks
timeArray = time.localtime(ticks)
print timeArray
otherStyleTime = time.strftime("%Y--%m--%d %H:%M:%S", timeArray)
print otherStyleTime
输出结果为:
当前时间戳为: 1532161766.65
time.struct_time(tm_year=2018, tm_mon=7, tm_mday=21, tm_hour=16, tm_min=29, tm_sec=26, tm_wday=5, tm_yday=202, tm_isdst=0)
2018--07--21 16:29:26
日期转为时间戳
time.strptime(tss1, "%Y-%m-%d %H:%M:%S")
,int(time.mktime(timeArray))
import time # 引入time模块
tss1 = '2013-10-10 23:40:00'
# 转为时间数组
timeArray = time.strptime(tss1, "%Y-%m-%d %H:%M:%S")
# timeArray可以调用tm_year等
print timeArray
# 转为时间戳
timeStamp = int(time.mktime(timeArray))
print timeStamp
输出结果:
time.struct_time(tm_year=2013, tm_mon=10, tm_mday=10, tm_hour=23, tm_min=40, tm_sec=0, tm_wday=3, tm_yday=283, tm_isdst=-1)
1381419600
1.4 时间数组
time.strftime(format[, t])格式化日期
- 该函数接收以时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。
- format -- 格式字符串。
- t -- 可选的参数t是一个struct_time对象。
说明:
- %y 两位数的年份表示(00-99)
- %Y 四位数的年份表示(000-9999)
- %m 月份(01-12)
- %d 月内中的一天(0-31)
- %H 24小时制小时数(0-23)
- %I 12小时制小时数(01-12)
- %M 分钟数(00=59)
- %S 秒(00-59)
- %a 本地简化星期名称
- %A 本地完整星期名称
- %b 本地简化的月份名称
- %B 本地完整的月份名称
- %c 本地相应的日期表示和时间表示
- %j 年内的一天(001-366)
- %p 本地A.M.或P.M.的等价符
- %U 一年中的星期数(00-53)星期天为星期的开始
- %w 星期(0-6),星期天为星期的开始
- %W 一年中的星期数(00-53)星期一为星期的开始
- %x 本地相应的日期表示
- %X 本地相应的时间表示
- %Z 当前时区的名称
1.5 时间元祖
- time.strptime() 函数根据指定的格式把一个时间字符串解析为时间元组
- struct_time元组,用一个元组装起来的9组数字处理时间
二. datetime模块
datetime模块定义了下面这几个类:
- datetime.date:表示日期的类。常用的属性有year, month, day;
- datetime.time:表示时间的类。常用的属性有hour, minute,
- second, microsecond;
- datetime.datetime:表示日期时间。
- datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
- datetime.tzinfo:与时区有关的相关信息。
python中处理的事件类型
- 时间戳的方式(相对于1970.1.1 00:00:00以秒计算的偏移量),时间戳是惟一的,如:1382678303.098
- 以数组的形式表示即(struct_time),共有九个元素,分别表示,同一个时间戳的struct_time会因为时区不同而不同
如:time.struct_time(tm_year=2013, tm_mon=10, tm_mday=25, tm_hour=13, tm_min=21, tm_sec=33, tm_wday=4, tm_yday=298, tm_isdst=0)
- tm_wday:(0-6, Monday is 0)
- tm_yday:(day in the year, 1-366)
- tm_isdst:(-1, 0 or 1) 0:普通 1:DST夏令时比正常的早一个小时 -1:根据当前时区
time和datetime模块区别
1. time模块
import time
print time.time()#获得当前时间的时间戳
print time.clock()#第一次运行获得当前时间的时间戳,第二次运行就是间隔上一次运行的时间间隔
print time.mktime
输出结果为:
1532165477.73
0.025028
1384139471.0
2. datetime模块
from datetime import *
print date.today()#获取今天的日期
print datetime.today()#获取今天的日期和时间
print datetime.now()#获取当前的日期和时间
输出结果为:
2018-07-21
2018-07-21 17:29:02.904651
2018-07-21 17:29:02.904675
ps: 字符串不能直接转换为时间戳,需要先转为struct_time
2.1 处理一些特殊的情况,比如需要设定某个时间的间距的时候,用到datetime的datetime.timedelta类。
小结
昨天无意中被旁边妹子问到时间戳相关问题,鉴于没详细了解过,就写出来整理一下。