Python之time与datetime获得系统时间

python有两个模块可以用来获得系统时间,分别是time与datetime模块。平时经常用到,现查又找不到总结的比较全面的文章,因此做一个总结归纳。

1 time模块

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 当前时区的名称
%% %号本身 
'''

2 datetime

datatime模块重新封装了time模块,提供更多接口,提供的类有:date,time,datetime,timedelta,tzinfo。

2.1 date类

#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

2.2 time类

#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

2.3 datetime类

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)

 

2.4 timedelta类

使用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

2.5 tzinfo时区类

#! /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

 

你可能感兴趣的:(Python)