python有两个模块可以用来获得系统时间,分别是time与datetime模块。平时经常用到,现查又找不到总结的比较全面的文章,因此做一个总结归纳。
time精度只能到秒,具体使用方法如下
import time
# 生成timestamp
time.time()
# 输出1970年到现在的时间间隔
# 1539154145.183094
time.localtime(time.time())
# time.struct_time(tm_year=2018, tm_mon=10, tm_mday=10, tm_hour=14, tm_min=49, tm_sec=37, tm_wday=2, tm_yday=283, tm_isdst=0)
time.strftime('%Y-%m-%d',time.localtime(time.time()))
# '2018-10-10'
'''
python中时间日期格式化符号:
%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 当前时区的名称
%% %号本身
'''
datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。
#datetime.date(year, month, day)
from datetime import date
birthday = date(year=1993, month=1, day=18)
birthday
#datime.date(1993, 1, 18)
birthday.year
#1993
#datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] )
from datetime import time
now_time = time(hours=20, minute=30, second=10)
now_time
#datetime.time(20, 30, 10)
now_time.hours
#20
datetime相当于date和time结合起来。
如果要获得当前系统的时间,只需要print(datetime.now())即可
如果要计算某段代码的运行时间,只需要在代码前后分别输出datetime.now(),然后作差即可,举例如下
#datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )
#在实例化datetime对象时,year, month, day是必填项,hour, minute, second, microsecond(微秒), tzinfo(时区)是可选项。
from datetime import datetime
birthday = datetime(year=1993,month=1,day=18)
birthday
#datetime.datetime(1993, 1, 18, 0, 0)
now = datetime.now()
now
#datetime.datetime(2018, 10, 10, 15, 2, 6, 429924)
print(now)
#2018-10-10 15:2:6.429924
dt1 = datetime.now()
'''
添加要运行的代码
'''
dt2 = datetime.now()
print('this code take time of ',dt2-dt1)
使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。
#coding:utf-8
from datetime import *
dt = datetime.now()
#日期减一天
dt1 = dt + timedelta(days=-1)#昨天
dt2 = dt - timedelta(days=1)#昨天
dt3 = dt + timedelta(days=1)#明天
delta_obj = dt3-dt
print type(delta_obj),delta_obj# 1 day, 0:00:00
print delta_obj.days ,delta_obj.total_seconds()#1 86400.0
#! /usr/bin/python
# coding=utf-8
from datetime import datetime, tzinfo,timedelta
"""
tzinfo是关于时区信息的类
tzinfo是一个抽象类,所以不能直接被实例化
"""
class UTC(tzinfo):
"""UTC"""
def __init__(self,offset = 0):
self._offset = offset
def utcoffset(self, dt):
return timedelta(hours=self._offset)
def tzname(self, dt):
return "UTC +%s" % self._offset
def dst(self, dt):
return timedelta(hours=self._offset)
#北京时间
beijing = datetime(2011,11,11,0,0,0,tzinfo = UTC(8))
print "beijing time:",beijing
#曼谷时间
bangkok = datetime(2011,11,11,0,0,0,tzinfo = UTC(7))
print "bangkok time",bangkok
#北京时间转成曼谷时间
print "beijing-time to bangkok-time:",beijing.astimezone(UTC(7))
#计算时间差时也会考虑时区的问题
timespan = beijing - bangkok
print "时差:",timespan
#Output==================
# beijing time: 2011-11-11 00:00:00+08:00
# bangkok time 2011-11-11 00:00:00+07:00
# beijing-time to bangkok-time: 2011-11-10 23:00:00+07:00
# 时差: -1 day, 23:00:00