time模块与datetime模块

time模块

常用方法

时间元祖

时间格式

import time

#字符串格式更改。如提time="2017-10-10 23:40:00",想改为 time="2017年10月10日 23点40分00秒"
# 分析  time 时间字符串->格式化解析为时间元祖->格式化输出为时间字符串
time1="2017-10-10 23:40:00"
time_tuple_1=time.strptime(time1,'%Y-%m-%d %H:%M:%S')
print(time_tuple_1)


#接受时间戳,返回时间元祖,不带参数默认时间戳为time.time().
print(time.localtime(time.time())) #返回当地时间的时间元祖
print(time.gmtime(time.time()))  #返回格林威治时间的时间元祖

#接受时间元组并返回时间辍
print(time.mktime(time_tuple_1)) #时间浮点数

# time2=time.strftime('%Y年%m月%d日 %H点%M分%S秒',time_tuple_1)
# print(time2)
time2="%s年%s月%s日 %s点%s分%s秒"%(time_tuple_1.tm_year,time_tuple_1.tm_mon,time_tuple_1.tm_mday,time_tuple_1.tm_hour,time_tuple_1.tm_min,time_tuple_1.tm_sec)
print(time2)

#1.将字符串的时间"2017-10-10 23:40:00"转换为时间戳和时间元组
# 时间字符串->时间元祖->时间戳
import time
time1='2017-10-10 23:40:00'
timeTuple=time.strptime(time1,'%Y-%m-%d %H:%M:%S')
timetamp=time.mktime(timeTuple)
print('时间元祖',timeTuple)
print('时间戳',timetamp)

#2.字符串格式更改。如提time = "2017-10-10 23:40:00",想改为 time= "2017/10/10 23:40:00"
# 时间字符串<->时间元祖
time2="2017-10-10 23:40:00"
timeTuple2=time.strptime(time2,'%Y-%m-%d %H:%M:%S')
time3=time.strftime('%Y/%m/%d %H:%M:%S',timeTuple2)
print(time3)

# 3.获取当前时间戳转换为指定格式日期
# 年/月/日 时-分-秒
# 时间戳->时间元祖->时间字符串
timetamp2=time.time()
timeTuple3=time.localtime(timetamp2)
time4=time.strftime('%Y/%m/%d %H-%M-%S',timeTuple3)
print(time4)

#4.获得三天前的时间
# 从时间戳下手,当前时间戳减去3*24*60*60 秒数,就是三天前的时间
# 时间戳->时间元祖->时间字符串
timetamp3=time.time()-3*24*60*60
timeTuple4=time.localtime(timetamp3)
time5=time.strftime('%Y/%m/%d %H-%M-%S',timeTuple4)
print(time5)

datetime模块

通过初步阅读datetime模块源码,datetime模块包含五个内部类,分别是:

tzinfo类(表示日期时间的时区)

date类(表示具体日期,精确到天,例如2018-7-22)

time类(表示具体时间,可精确到微秒,例如11:47:23.0001)

timedelta类(可表示具体的时间差,例如一小时时间差为timedelta(hours=1))

datetime类(表示具体日期时间,可理解为date类+time类所有属性和内部方法的结合体,例如:2018-7-22 11:49:30.0001)

构造一个date对象

datetime.date(year, month, day)  #date对象(年月日都不能是以0开头 (2017,04,08)错误 )

date.max、date.min:date对象所能表示的最大、最小日期;

date.resolution:date对象表示日期的最小单位。这里是天。

date.today():返回一个表示当前本地日期的date对象;

date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;

实例方法和属性

replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)

timetuple():返回日期对应的time.struct_time对象;

weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;

isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;

isocalendar():返回格式如(year,sum_week,day)的元组;

isoformat():返回格式如'YYYY-MM-DD’的字符串;

strftime(fmt):和time模块format相同。

构造一个time对象

 datetime.time(hour[ , minute[ , second[ , microsecond[ , tzinfo] ) 

time.min、time.max:time类所能表示的最小、最大时间

time.resolution:时间的最小单位,这里是1微秒;
方法和属性

t1 = datetime.time(10,23,15)  #time对象 时,分,秒...
t1.hour、t1.minute、t1.second、t1.microsecond:时、分、秒、微秒
t1.tzinfo:时区信息;
t1.replace([ hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ):创建一个新的时间对象,用参数指定的时、分、秒、微秒代替原有对象中的属性
     (原有对象仍保持不变);
t1.isoformat():返回型如"HH:MM:SS"格式的字符串表示; 
t1.strftime(fmt):同time模块中的format;

构造一个datetime对象

datetime相当于date和time结合起来。
datetime.datetime (year, month, day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] )

静态方法和字段

datetime.today():返回一个表示当前本地时间的datetime对象;
datetime.now([tz]):返回一个表示当前本地时间的datetime对象,如果提供了参数tz,则获取tz参数所指时区的本地时间;
datetime.utcnow():返回一个当前utc时间的datetime对象;#格林威治时间
datetime.fromtimestamp(timestamp[, tz]):根据时间戮创建一个datetime对象,参数tz指定时区信息;
datetime.utcfromtimestamp(timestamp):根据时间戮创建一个datetime对象;
datetime.combine(date, time):根据date和time,创建一个datetime对象;
datetime.strptime(date_string, format):将格式字符串转换为datetime对象;

datetime对象属性和方法(attribute and mothod)

  1. 对象的属性year, month, day, hour, minute,second, microsecond, tzinfo;返回对象的相关属性

  2. weekday()返回星期的天(周一0,周日6)

  3. isoweekday() 返回星期的天(周一1,周日7)

  4. date() 返回一个timedate.data对象

  5. time()返回一个timedate.time对象

  6. isocalendar() 返回一个三元组(年,周,周的天)

  7. timestamp()返回时间戳

  8. replace() 返回一个新的datetime对象,原对象不变

  9. strftime() 返回一个指定fromat的时间字符串对象

  10. ctime() 返回时间的字符串对象

dt=datetime.now()#datetime对象
dt.year、month、day、hour、minute、second、microsecond、tzinfo:
dt.date():获取date对象;
dt.time():获取time对象;
dt. replace ([ year[ , month[ , day[ , hour[ , minute[ , second[ , microsecond[ , tzinfo] ] ] ] ] ] ] ]):
dt. timetuple ()
dt. utctimetuple ()
dt. toordinal ()
dt. weekday ()
dt. isocalendar ()
dt. isoformat ([ sep] )
dt. ctime ():返回一个日期时间的C格式字符串,等效于time.ctime(time.mktime(dt.timetuple()));
dt. strftime (format)

timedelta类,时间加减

使用timedelta可以很方便的在日期上做天days,小时hour,分钟,秒,毫秒,微妙的时间计算,如果要计算月份则需要另外的办法。

import datetime
import datetime
d = datetime.datetime.now()
d1 = d + datetime.timedelta(days=-1)      #昨天
d2 = d - datetime.timedelta(days=1)      #昨天
d3 = d + datetime.timedelta(days=1)          #明天
print(d)
print(d1)
print(d2)
print(d3)

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(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)
posted @ 2019-07-28 19:03  码迷-wjz  阅读(204)  评论(0)    收藏  举报