Python学习之路(27)——时间相关模块time&datetime

一、time模块

三种格式:

1、timestamp时间戳:基于Unix时间戳,时间表示的范围为1970-2038年之间,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量;

2、struct_time时间元组,有9个元素组:tm_year(年,4位数)、tm_mon(月)、tm_mday(日)、tm_hour(小时)、tm_min(分钟)、tm_sec(秒)、tm_wday(一周的第几日,0-6,0表示周一)、tm_yday(一年的第几日)、tm_isdst(夏令时,默认为-1)

3、format time时间字符串

time.localtime()返回struct_time

>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=13, tm_min=53, tm_sec=44, tm_wday=6, tm_yday=70, tm_isdst=0)

time.time()返回当前时间的时间戳

>>> time.time()
1520747165.2202055

time.mktime()将struct_time转换为时间戳

>>> time.time()
1520748112.558515
>>> time.mktime(time.localtime())
1520748125.0

time.gmtime(secs),与time.localtime相似,返回struct_time,该时间为转换为UTC时区的时间

>>> time.gmtime()
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=6, tm_min=4, tm_sec=50, tm_wday=6, tm_yday=70, tm_isdst=0)
>>> time.gmtime(time.time())
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=6, tm_min=4, tm_sec=59, tm_wday=6, tm_yday=70, tm_isdst=0)
>>> time.localtime()
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=14, tm_min=5, tm_sec=5, tm_wday=6, tm_yday=70, tm_isdst=0)

time.sleep(secs)线程延迟指定的时间运行,单位为秒

>>> time.sleep(5)

time.clock(),在UNIX系统上,返回进程时间(用秒表示的浮点数,时间戳);在Windows系统中,第一次调用返回的是进程运行的实际时间,第二次之后的调用是自第一次调用以后到现在的运行时间。

import time
time.sleep(3)
print(time.clock())
time.sleep(5)
print(time.clock())
time.sleep(8)
print(time.clock())

#执行结果为
7.292592294136501e-07
4.999570466313875
12.99863956690753

time.asctime([t]),将一个表示时间的元组以struct_time格式表示;没有时间元组参数,则将time.localtime()作为参数传入

>>> time.asctime()
'Sun Mar 11 14:21:05 2018'
>>> time.asctime((2018, 3, 11, 20, 20, 20, 6 ,1 , 1))
'Sun Mar 11 20:20:20 2018'

time.ctime(secs),将一个时间戳转换为time.asctime()的形式;没有参数或参数为None,则将time.time()作为参数传入。相当于time.asctime(time.localtime())

>>> time.ctime()
'Sun Mar 11 14:24:20 2018'
>>> time.ctime(5555555555.555)
'Tue Jan 18 17:52:35 2146'

time.strftimr(format[, t]),将指定的struct_time(默认是当前时间),根据指定的格式化字符串输出,其中:

%y  两位数的年份表示(00-99)

%Y  四位数的年份表示(0000-9999)

%m  月份(01-12)

%d  月内的一天(0-31)

%H  24小时制小时数(0-23)

%l   12小时制小时数(01-12)

%M  分钟数(00-59)

%S  秒(00-59)

>>> time.strftime('%Y%m%d%H%M%S',time.gmtime())
'20180311062958'
>>> time.strftime('%Y%m%d%H%M%S')
'20180311143005'
>>> time.strftime('%Y-%m-%d %H:%M:%S')
'2018-03-11 14:30:14'

time.strptime(string[, format]),与time.strftime相反,将时间字符串转换为struct_time格式表示

>>> time.strptime("2018-03-11", "%Y-%m-%d")
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=70, tm_isdst=-1)
>>> time.strptime("2018-03-11 14:34:50", "%Y-%m-%d %H:%M:%S")
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=14, tm_min=34, tm_sec=50, tm_wday=6, tm_yday=70, tm_isdst=-1)

  

二、datetime模块

datetime模块提供对时间和日期的封装,并提供它们之间的数学运算。该模块包含5个类:

datetime.date:年月日构成的日期(相当于日历)

datetime.time:时分秒和微秒构成的一天24小时内的具体时间(相当于手表)

datetime.datetime:date和time结合在一起,年月日加上具体时间

datetime.timedelta:时间间隔对象(datedelta)。一个时间点(datetime)加上一个时间间隔(timedelta)可以得到一个新的时间点(datetime)。

1、date类

>>> import datetime
>>> import time
#####类方法和类属性
>>> print(datetime.date.today())
2018-03-11
>>> print(datetime.date(2018, 3, 11))
2018-03-11
>>> print(datetime.date.max)
9999-12-31
>>> print(datetime.date.max)
9999-12-31
>>> print(datetime.date.min)
0001-01-01
>>> print(datetime.date.fromtimestamp(time.time()))
2018-03-11
>>> print(datetime.date.resolution
1 day, 0:00:00 #####实例方法和实例属性 >>> d = datetime.date(2018, 3, 11) >>> print(d.year) 2018 >>> print(d.month) 3 >>> print(d.day) 11 >>> print(d.replace(day = 12)) 2018-03-12 >>> print(d.timetuple()) time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=70, tm_isdst=-1) >>> print(d.weekday()) 6 >>> print(d.isoweekday()) 7 >>> print(d.isocalendar()) (2018, 10, 7) >>> print(d.isoformat()) 2018-03-11 >>> print(d.strftime("%Y-%m-%d")) 2018-03-11

  

2、time类

#####类方法和类属性
>>> datetime.time.max
datetime.time(23, 59, 59, 999999)
>>> print(datetime.time.max)
23:59:59.999999
>>> print(datetime.time.min)
00:00:00
>>> print(datetime.time.resolution)
0:00:00.000001


#####实例方法和实例属性
>>> tm = datetime.time(15, 15, 15)
>>> print(tm)
15:15:15
>>> print(tm.hour, tm.minute, tm.second, tm.microsecond)
15 15 15 0
>>> print(tm.replace(hour = 16))
16:15:15
>>> print(tm.isoformat())
15:15:15
>>> print(tm.strftime('%X'))
15:15:15

  

3、datetime类

#####类方法和类属性
>>> print(datetime.datetime.max)
9999-12-31 23:59:59.999999
>>> print(datetime.datetime.min)
0001-01-01 00:00:00
>>> print(datetime.datetime.resolution)
0:00:00.000001
>>> print(datetime.datetime.today())
2018-03-11 15:24:46.543515
>>> print(datetime.datetime.now())
2018-03-11 15:24:52.677515
>>> print(datetime.datetime.fromtimestamp(time.time()))
2018-03-11 15:25:38.527515
>>> print(datetime.datetime.utcfromtimestamp(time.time()))
2018-03-11 07:26:07.523515



#####实例方法和实例属性
>>> dt = datetime.datetime.now()
>>> print(dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond, dt.tzinfo)
2018 3 11 15 27 4 348515 None
>>> print(dt.date())
2018-03-11
>>> print(dt.time())
15:27:04.348515
>>> print(dt.replace(day = 12))
2018-03-12 15:27:04.348515
>>> print(dt.timetuple())
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=15, tm_min=27, tm_sec=4, tm_wday=6, tm_yday=70, tm_isdst=-1)
>>> print(dt.utctimetuple())
time.struct_time(tm_year=2018, tm_mon=3, tm_mday=11, tm_hour=15, tm_min=27, tm_sec=4, tm_wday=6, tm_yday=70, tm_isdst=0)
>>> print(dt.toordinal())
736764
>>> print(dt.weekday())
6
>>> print(dt.isocalendar())
(2018, 10, 7)
>>> print(dt.isoformat())
2018-03-11T15:27:04.348515
>>> print(dt.ctime())
Sun Mar 11 15:27:04 2018
>>> print(dt.strftime("%Y-%m-%d %H:%M:%S"))
2018-03-11 15:27:04

  

4、timedelta类

>>> dt =datetime.datetime.now()
>>> dt1 = dt + datetime.timedelta(days = -1)
>>> print(dt1)
2018-03-10 15:34:26.853515
>>> dt2 = dt - datetime.timedelta(days = 1)
>>> print(dt2)
2018-03-10 15:34:26.853515
>>> dt3 = dt + datetime.timedelta(days = 1)
>>> print(dt3)
2018-03-12 15:34:26.853515
>>> delta_obj = dt3 - dt
>>> print(type(delta_obj))
<class 'datetime.timedelta'>
>>> print(delta_obj)
1 day, 0:00:00
>>> print(delta_obj.days, delta_obj.total_seconds())
1 86400.0

  

5、tzinfo时区类

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(2018,3,11,15,30,0,tzinfo = UTC(8))
print("beijing time:",beijing)
#曼谷时间
bangkok = datetime(2018,3,11,15,30,0,tzinfo = UTC(7))
print("bangkok time",bangkok)
#北京时间转成曼谷时间
print("beijing-time to bangkok-time:",beijing.astimezone(UTC(7)))

#计算时间差时也会考虑时区的问题
timespan = beijing - bangkok
print("时差:",timespan)


#####
执行结果:
beijing time: 2018-03-11 15:30:00+08:00
bangkok time 2018-03-11 15:30:00+07:00
beijing-time to bangkok-time: 2018-03-11 14:30:00+07:00
时差: -1 day, 23:00:00

  

posted on 2018-03-11 15:40  nicolas_Z  阅读(165)  评论(0)    收藏  举报

导航