python3基础:时间相关模块和函数

时间相关模块和函数

基本概念

在python中与时间处理相关的模块有:time、datatime和calender

在python中表示时间的方式有:时间戳、格式化的时间字符串、元祖(struct_time共9种元素)。由于time模块主要是调用c库实现的,所以在不同的平台可能会不同。

  • 时间戳(timestamp):表示从1970年1月1号00:00:00开始到现在按秒计算的偏移量。tick单位(系统的相对时间,间隔以秒为单位的浮点数)最适合做日期运算。但是1970年之前的时间无法表示,UNIX和win都只支持到2038年某日。 type(time.time())返回的是float类型,返回时间戳的函数主要有time()、clock()
  • UTC(世界协调时),就是格林威治天文时间。在中国为UTC+8,DST夏令时。
  • 元祖方式:struct_time共有9个元素,返回struct_time的函数主要有gmtime()、localtime()、strptime()

time模块

  1. 时间元祖
  • 属性:

序号

属性

说明

1

tm_year

2008

4位数的年份

2

tm_mon

1-12

月份

3

tm_mday

1-31

4

tm_hour

0-23

5

tm_min

0-59

分钟

6

tm_sec

0-61(60或61是闰秒)

7

tm_wday

0-6(0是周一)

一周的第几天

8

tm_yday

1-366(日历)

一年的第几天

9

tm_isdst

-1,0,1

其中-1是决定是否为夏令时

 

  • 代码示例1:时间元祖

import time

'''时间元祖'''

ls=time.localtime()

print(ls)#时间元祖

 

#直接使用元祖索引获取对应的属性值

print('year:',ls[0])

print('month:',ls[1])

print('day:',ls[2])

 

#使用成员符号调用

print('year:',ls.tm_year)

 

  • 代码示例2:格林威治时间

import time

ls=time.gmtime()

print(ls)

 

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

注意:返回的是float类型

  • 代码示例:

import time

print(time.time()) #表示当前时间距离1970年1月1日的秒数

print(int(time.time())) #对时间戳取整

 

  1. time.localtime():将时间戳转换为当前时间的时间元祖

命令格式:time.localtime([secs])

参数说明:secs--是一个秒数,将其转换为time.struct_time类型的对象,不写secs的话默认将当前时间作为参数(即time.time())

  • 代码示例:

 

  1. time.gmtime():将时间戳转换为UTC时区的时间元祖

命令格式:time.gmtime([secs])

参数说明:secs--是一个秒数,将其转换为UTC时区(0时区)time.struct_time类型的对象,不写secs的话默认将当前时间作为参数(即time.time())

  • 代码示例:

 

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

与gmtime()和localtime()相反,接收struct_time类型的参数,返回浮点数表示的秒数,如果输入的不是合法的时间,会触发OverflowError或ValueError异常

命令格式:time.gmtime(t])

参数说明:secs--是一个秒数,将其转换为UTC时区(0时区)time.struct_time类型的对象,不写secs的话默认将当前时间作为参数(即time.time())

  • 代码示例:

st=time.localtime()

print(st)

print(time.mktime(st))

 

 

  1. time.sleep():睡眠函数

命令格式:time.sleep(seccs)

参数说明:secs--是一个秒数

  • 代码示例:

time.sleep(10)#睡眠10秒钟

  1. time.clock():睡眠函数

以浮点数计算的秒数返回当前的CPU时间,用来衡量不同程序的耗时, 比time.time()更有用.返回的是当前处理器时间作为Unix上以秒为单位的浮点数。

  • 代码示例:

'''sleep clock'''

def procedure():

      time.sleep(5)

 

time1=time.clock()

procedure()

print(time.clock()-time1,'seconds process time!')

 

#利用time.time()来计算耗时

time2=time.time()

procedure()

print(time.time()-time2,'seconds!')

 

 

 

  1. time.strftime():返回字符串表示的当地时间

把一个代表时间的元祖或者struc_time(如由time.localtime()或time.gmtime()返回)转化为格式化的时间字符串,格式由参数format决定;没有指定的话,将传入time.localtime();如果元祖中任何一个元素越界会跑出ValueError异常;函数返回的是一个可读表示的本地时间字符串。

命令格式:time.strftime(format,[t])

参数说明:format--是一个格式化字符串

          t:可选的参数,是一个struc_time对象

  • 时间字符串的格式化符号:

符号

说明(区分大小写)

%a

本地星期名称的简写(如星期四为Thu)

%A

本地星期名称的全称(如星期四为Thursday)

%b

本地月份名称的简写(如八月份为agu)

%B

本地月份名称的全称(如八月份为aguust)

%c

本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)

%d

一个月中的第几天(01-31)

%H

一天中的第几个小时(24小时制,00-23)

%I

第几个小时(12小时制,0 -11)

%j

一年中的第几天(001 -366)

%m

月份(01-12)

%M

分钟数(00-59)

%p

%p  本地am或者pm的相应符

%S

秒(00 -61)

%U

一年中的星期数。(00 -53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。

%w

一个星期中的第几天(0 -6,0是星期天)

%W

和%U基本相同,不同的是%W以星期一为一个星期的开始。

%x

本地相应日期字符串(如15/08/01)

%X

本地相应时间字符串(如08:08:10)

%y

去掉世纪的年份(00 -99)两个数字表示的年份

%Y

完整的年份(4个数字表示年份)

%z

与UTC时间的间隔(如果是本地时间,返回空字符串)

%Z

时区的名字(如果是本地时间,返回空字符串)

%%

“%”字符

 

  • 代码示例1:'''strftime'''

#获取当前时间的struct_time对象

ft=time.localtime()

 

#格式化字符串

st=time.strftime('%Y-%m-%d %H:%M:%S',ft )

print(st)

 

 

  • 代码示例2:'''直接使用字符串拼接成格式时间字符串'''

#获取当前时间的struct_time对象

ft=time.localtime()

 

#直接使用字符串拼接成格式时间字符串

print(str(ft.tm_year)+'年'+str(ft.tm_mon)+'月'+str(ft.tm_mday)+'日'+

      str(ft.tm_hour)+'时'+str(ft.tm_min)+'分'+str(ft.tm_sec)+'秒')

 

 

  • 代码示例3:将当前时间的时间戳转换成想要的时间格式字符串

import locale

 

locale.setlocale(locale.LC_CTYPE,'chinese')#设定当时

st=time.strftime('%Y年-%m月-%d日 %H:%M:%S',time.localtime() )

 

print(st)

 

 

  • 代码示例4:获取当前时间的年月日时分秒

 

  • 代码示例5:拼接自定义的日期

now = time.localtime()

print (now)

#获取当前时间的格式化时间

print (time.strftime('%Y-%m-%d %H:%M:%S', now))

#星期的简写

print (time.strftime('%a', now))

#星期的全写

print (time.strftime('%A', now))

#月份的简写

print (time.strftime('%b', now))

#月份的全写

print (time.strftime('%B', now))

#得到日期时间的字符串

print (time.strftime('%c', now))

#日期字符串

print (time.strftime('%x', now))

#时间字符串

print (time.strftime('%X', now))

#今天是今年的第几天

print (time.strftime('%j', now))

#这周是星期几

print (time.strftime('%w', now))

#这周是今天的第几周

print (time.strftime('%U', now))

 

 

  1. time.strptime():将格式化字符串转换成struct_time

time.strftime()的逆操作,返回的是一个struc_time对象

命令格式:time.strftime(string,format)

参数说明:string--时间字符串

format--是一个格式化字符串

  • 代码示例:

stime='2017-07-07 12:12:12'

#通过strptime()函数将stime转化成strcut_time形式

ft=time.strptime(stime,'%Y-%m-%d %H:%M:%S')

 

print(ft)

#遍历返回的时间元祖

for i in ft:

      print(i)

 

 

datetime模块

是基于time包的一个高级包。datetime可以理解为date和time两个部分组成:date指年月日构成的日期(相当于日历),time是指时分秒微秒构成的一天24小时中的具体时间(相当于手表)。由此可以将这两个分开管理(datetime.date类, datetime.time类),也可以将两者合并在一起(datetime.datetime类)。下面就分别介绍一 下datetime模块中的这几个类。

  1. 引入datetime模块

import datetime(或from datetime import *)

datetime模块定义了两个常量:

datetime.MINYEAR :最小年份,MINYEAR = 1。

datetime.MAXYEAR:最大年份。MAXYEAR = 9999。

 

  1. datetime模块常用的几个类

datetime.date:日期类。常用的属性有year,month,day;

datetime.time:时间类。常用的属性有hour,minute,second,microsecond; datetime.timedelta:表示时间间隔,即两个时间点之间的长度。

datetime.tzinfo:与时区有关的信息。

  1. date类的常用方法
  1. 构造函数:

date类是一个日期类,由年、月、日组成,该类的构造函数如下:

class datetime.date(year, month, day):

参数说明:year--表示年,范围(MINYEAR, MAXYEAR],即[1, 9999]

  month--表示月,范围[1, 12]

day--某个月中第几天,最大值根据给定的year,month参数来决定。例如闰年2 月份有29天

  • 代码示例:date对象所能表示的最大和最小日期,返回的是datetime.date类型对象

 

  1. date.today():表示当前今天日期的date对象

 

  1. date.fromtimestamp():根据给定的时间戳返回一个date对象
  • 代码示例:

import datetime

import time

 

#获取当前时间的时间戳

now=time.time()

print(now)

#将时间戳转换为date类型的时间

s=datetime.date.fromtimestamp(now)

print (s)

 

  1.  date.weekday():返回weekday中的星期几

注意:星期一,返回0;星期二,返回1,以此类推

函数格式:date.weekday(s)

参数说明:s--datetime.date类型的参数

  • 代码示例:

 

  1.  date.isoweekday():返回weekday中的星期几

注意:星期一,返回1;星期二,返回2,以此类推

函数格式:date.isoweekday(s)

参数说明:s--datetime.date类型的参数

  • 代码示例:

now=datetime.date.today()

print(now)

print(datetime.date.isoweekday(now))

 

  1.  date.isocaendar():返回时间对象的year/week/weekday(工作日)

函数格式:date.isocalendar(s)

参数说明:s--datetime.date类型的参数

  • 代码示例:

now=datetime.date.today()

print(datetime.date.isocalendar(now))

 

  1.  date.strftime():返回自定义的格式时间字符串

函数格式:date.strftime(format)

参数说明:format--自定义的时间格式

  • 代码示例:

now=datetime.date.today()

print(now.strftime('%Y-%m-%d %H:%M:%S'))

 

  1.  日期加上一个时间间隔

dateNow  = dateOld + timedelta #timedelta表示时间间隔,后面会介绍。

日期加上一个间隔,返回一个新的日期对象。

  • 代码示例:

today=datetime.date.today() #获取今天的日期

print(today+datetime.timedelta(days=10)) #今天的日期加上10天

 

  1.  日期减去一个时间间隔

dateNow  = dateOld - timedelta #timedelta表示时间间隔,后面会介绍。

日期减去一个间隔,返回一个新的日期对象。

  • 代码示例:

today=datetime.date.today() #获取今天的日期

print(today-datetime.timedelta(days=10)) #今天的日期之前的10天

 

  1.  两个日期相减

timedelta = date1- date2

返回两个日期间的间隔对象

  • 代码示例:

today=datetime.date.today() #获取今天的日期

print(today)

future=today.replace(day=15) #替换形成一个新的日期

print(future)

print(future-today) #计算新旧日期的间隔

 

  1.  比较日期大小

date1 < date2 返回比较结果布尔值,真返回True,假返回False

  • 代码示例:

today=datetime.date.today()

print(today)

future=today.replace(day=15)

print(future)

print(future>today)

print(future<today)

 

 

  1. time类的常用方法
  1.  构造函数

time类是一个时间类,由时、分、秒、微秒组成,该类的构造函数如下:

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

参数说明:hour--表示小时,范围[0,24)

  minute--表示分,范围[0,60)

second--表示秒,范围[0,60)

microsecond--表示微秒,范围[0, 1000000)

tzinfo--表示时区信息。

 

time.min:代表time类所能表示的最小时间

time.max:代表time类所能表示的最大时间

  • 代码示例:

 print(datetime.time.min)

 print(datetime.time.max)

 

 

  1.  time类的属性-hour、minute、second、 microsecond
  • 代码示例:

tm=datetime.datetime.now()  #注意在datetime类中

print(tm)

print(tm.hour)

print(tm.minute)

print(tm.second)

print(tm.microsecond)

 

  1.  time.isoformat():返回格式如:HH:MM:SS的时间字符串
  • 代码示例:

tm=datetime.time(12,12,00)

print(tm)

tm1=tm.isoformat()

print(tm1)

 

 

  1.  time.strftime():返回自定义格式的时间字符串
  • 代码示例:

tm=datetime.time(12,12,00)

print(tm)

print(tm.strftime('%H-%M-%S'))

 

 

  1. datetime类的常用方法

datetime类是date和time的结合体,包括date与time的所有信息, date和time类中具有的方法和属性,datetime类都具有。所以在我们 日常的工作中,可以仅使用datetime类。由于datetime类是date和time两部分组成的,所以其很多的实例方 法与属性都跟date和time都一样的

  1. 构造函数:

datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])

参数说明:和date/time类的构造函数一样

  1. datetime.today():返回当前本地时间的datetime对象

 

  1. datetime.now(tz):返回当前本地时间的datetime对象

tz指定时区信息,不传的话默认本地时区

  • 代码示例:

today=datetime.datetime.now()

print(today)

print(today.year)

print(today.month)

print(today.day)

print(today.hour)

print(today.minute)

print(today.second)

print(today.microsecond)

 

 

  1. datetime.fromtimestamp(tz):根据时间戳返回datetime对象

tz指定时区信息,不传的话默认本地时区

  • 代码示例:

import time

import datetime

t=time.time()

print (t)

##将时间戳转换为一个datetime对象

datetimes=datetime.datetime.fromtimestamp(t)

print(datetimes)

print(type(datetimes))

print(str(datetimes))

 

  1. datetime.strptima(string,format):将字符中转为datetime对象
  • 代码示例:

print(datetime.datetime.strptime('2018-07-21 14:01:10','%Y-%m-%d %H:%M:%S'))

 

  1.  datetime类的属性-year、month、day、hour、minute、second
  • 代码示例:

t=datetime.datetime.now()

print('当前的日期和时间是%s'%t)

print('当前的年份是%s'%t.year)

print('当前的月份是%s'%t.month)

print('当前的日期是%s'%t.day)

print('dd/mm/yyyy 格式是 %s/%s/%s' % (t.day, t.month, t.year) )

print('当前的小时是%s'%t.hour)

print('当前的分钟是%s'%t.minute)

print('当前的秒是%s'%t.second)

 

 

  1.  datetime.date():获取时间中的日期对象date
  • 代码示例:

dates=datetime.datetime.date(datetime.datetime.today())

print(dates)

print(type(dates))

print(dates.year)

 

 

  1.  datetime.time():获取时间中的时间对象time
  • 代码示例:

dates=datetime.datetime.time(datetime.datetime.today())

print(dates)

print(dates.hour)

 

 

  1.  datetime.combine():根据date和time创建datetime对象

datetime.combine(date,time):

参数说明:date--是datetime.date对象

  time--是datetime.time对象

 

  • 代码示例:

import datetime

print(datetime.datetime.combine(datetime.datetime.today(),datetime.time(18,1

2,35)))

 

  1.  datetime.repace():替换原有时间,获得新的日期时间

datetime.replace([year[,month[,day[,hour[,minute[,second[,microsecond[,tzinfo]]]]]]]])

  • 代码示例:

times=datetime.datetime.today()

print(times)

tmp=times.replace(year=1998,hour=23)

print(tmp)

 

 

  1.  time.mktime():将datetime对象转换成时间戳

datetime.mktime(strcut_time)

  • 代码示例:

import time

import datetime

#获得当前时间的datetime对象

t=datetime.datetime.now()

print(t)

#根据当前时间的datetime对象获取当前时间的时间元组

struct_time=t.timetuple()

print(struct_time)

#根据当前时间的时间元组获得当前时间的时间戳

timestamp=time.mktime(struct_time) #注意是time类中的方法

#对时间戳取整

timestamp = int(timestamp)

print (timestamp)

 

  1.  time.weekday(time):返回一周中的星期几

参数time是一个datetime.date类型的数据。返回weekday中的 星期几,星期一,返回0;星期二,返回1;以此类推。

  • 代码示例:

now=datetime.datetime.now()

print(now)

print(datetime.datetime.weekday(now))

 

 

  1.  time.isocaendar(time):以元祖形式返回年月日

参数time是一个datetime.date类型的数据。

  • 代码示例:

now=datetime.datetime.now()

print(now)

print(datetime.datetime.isocalendar(now))

 

  1.  time.strftime(format):返回自定义的格式时间字符串
  • 代码示例:

import datetime

now=datetime.datetime.now()

print(now)

#获取当前时间的格式化时间字符

print(now.strftime(('%Y-%m-%d %H:%M:%S %f')))

print(now.strftime(('%y-%m-%d %I:%M:%S %p')))

 

#星期的简写

print (now.strftime('%a'))

#星期的全写

print (now.strftime('%A'))

 

#月份的简写

print (now.strftime('%b'))

#月份的全写

print (now.strftime('%B'))

 

#得到日期时间的字符串

print (now.strftime('%c'))

#得到日期的字符串

print (now.strftime('%x'))

#得到时间的字符串

print (now.strftime('%X'))

 

#今天是星期几

print (now.strftime('%w'))

 

#今天是今年的第几天

print (now.strftime('%j'))

#今天是今年的第几周

print (now.strftime('%U'))

 

  1. timedelta类的常用方法

datetime.timedelta类对象代表两个时间之间的时间差,两个date或 datetime对象相减就可以返回一个timedelta对象。

  1. 构造函数:

class datetime.timedelta([days[, seconds[, microseconds[, milliseconds[, minutes[, hours[, weeks]]]]]]])

参数说明:所有的参数都是可选的,并且默认是0;

 参数的值可以是整数、浮点数、整数或负数

 针对时间存储,timedelta内部职能存储days、seconds、microseconds,其它值自动按如下规则转换:

1 millisecond(毫秒)转换成 1000 microseconds(微秒)

1 minute 转换成 60 seconds

1 hour 转换成 3600 seconds

1 week转换成 7 days

  • 代码示例:

 

 

  1. 两个日期的时间相减:
  • 代码示例:

import datetime

#求两个日期间的天数差

t1=datetime.datetime(2017,12,30)

t2=datetime.datetime(2018,8,9)

print((t2-t1).days) #得到的是datetime.timedelta时间对象,代表两个时间之差

 

  1. 日期或时间加上或减去一个时间间隔:

加上或减去的时间间隔是通过加减timedelta对象中的属性值给定的值实现的

  • 代码示例1:计算明天此时的时间

import datetime

#获得当前时间的datetime对象

now=datetime.datetime.now()

print('当前的时间为:',now)

 

#设定一个时间间隔,间隔为1天

delta=datetime.timedelta(days=1)

newTime=now+delta

print('明天的时间为:',newTime)

 

##得到明天的时间

print(str(newTime)[:-7])

#使用格式化函数得到明天的时间

print(newTime.strftime('%Y-%m-%d %H:%M:%S'))

 

#减1天

delta=datetime.timedelta(days=-1)

newTime=now+delta

print('昨天的时间为:',newTime)

 

  • 代码示例2:计算100天前的日期

import datetime

#获得当前时间的datetime对象

now=datetime.datetime.now()

print('当前的时间为:',now)

 

#设定100天前的时间间隔

delta=datetime.timedelta(days=-100)

 

#得到100天前的时间

newTime=now+delta

print('100天前的时间为:',newTime)

#使用格式化函数得到明天的时间

print(newTime.strftime('%Y-%m-%d'))

 

  • 代码示例3:计算3小时前的时间

import datetime

print(datetime.datetime.now()+datetime.timedelta(hours=-3))

 

  1. timedeta.total_seconds():获取总秒数
  • 代码示例:

print(datetime.timedelta(hours=2,seconds=30).total_seconds())

 

  1. calenda类的常用方法

calendar就是日历模块,提供了一些操作日期、生成日历的方法

  1. calendar.Calendar(firstweekday=0)

该类提供了许多生成器,如星期的生成器,某月日历生成器。

  1. calendar.TextCalendar(firstweekday = 0)

该类提供了按月、按年生成日历字符串的方法。

  1. calendar.HTMLCalendar(firstweekday = 0)

类似TextCalendar,只是生成器是HTML格式日历。

  1. caendar.day_name:星期的全称

 

  1. caendar.day_abbr:星期的简称

 

 

  1. caendar.month_name:月的全称

 

  1. caendar.month_abbr:月的简称

 

 

  1. caendar.isleap(year):判断是否为闰年

判断某年是否为闰年,如果是返回True,否则返回False

 

 

  1. caendar.month(year,month,w=2,I=1):返回指定年的某月

返回一个多行字符串格式的年月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度 为7* w+6。l是每星期的行数。

 

  1. caendar.calendar(year,w=2,I=1,c=6):返回指定年的日历

返回一个多行字符串格式的年历,3个月一行, 间隔距离为c。每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。 返回指定年的日历,按日历格式返回一年12个月的日历。

 

  1. caendar.HTMLCalendar():返回指定年的日历,htm格式

'''HTMLCalendar'''

import calendar

myCal=calendar.HTMLCalendar(calendar.SUNDAY)

print(myCal.formatmonth(2018,7))

with open('calendar.html','w') as fp:

      fp.write(myCal.formatmonth(2018,7))

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值