time
1. Python中表示时间的方式
l 时间戳
l 格式化的时间字符串
l 元组(struct_time)共九个元素。由于Python的time模块实现主要调用C库,所以各个平台可能有所不同。
2. UTC、时间戳、元组
l UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间。在中国为UTC+8。DST(Daylight Saving Time)即夏令时。
l 时间戳(timestamp)的方式:通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
l 元组(struct_time)方式:struct_time元组共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:
索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 比如2011
1 tm_mon(月) 1 - 12
2 tm_mday(日) 1 - 31
3 tm_hour(时) 0 - 23
4 tm_min(分) 0 - 59
5 tm_sec(秒) 0 - 61
6 tm_wday(weekday) 0 - 6(0表示周日)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1
3. 模块属性
1) time.time()
#获取当前时间戳
2) time.gmtime(timestamp)
#将一个时间戳转换为UTC时区(0时区)的struct_time
3) time.localtime(timestamp)
#将一个时间戳转换为当前时区的struct_time
4) time.ctime(timestamp)
#把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认time.time()为参数。它的作用相当于time.asctime(time.localtime(secs))。
5) time.asctime(struct_time)
#把一个表示时间的元组或者struct_time表示为这种形式:'Sun Jun 20 23:21:05 1993'。如果没有参数,将会将time.localtime()作为参数传入。
6) time.mktime(struct_time)
#将一个struct_time转化为时间戳
7) time.sleep(secs)
#将线程推迟指定的时间运行。单位为秒。
8) time.clock()
#这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
9) time.strftime("%a, %d %b %Y %H:%M:%S +0000", struct_time)
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。
10) time.strptime("30 Nov 00", "%d %b %y")
#把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
备注:
“%p”只有与“%I”配合使用才有效果。
文档中强调确实是0 - 61,而不是59,闰年秒占两秒(汗一个)。
当使用strptime()函数时,只有当在这年中的周数和天数被确定的时候%U和%W才会被计算。
datetime
1. datetime模块定义了下面这几个类:
datetime.date:表示日期的类。常用的属性有year, month, day;
datetime.time:表示时间的类。常用的属性有hour, minute, second, microsecond;
datetime.datetime:表示日期时间。
datetime.timedelta:表示时间间隔,即两个时间点之间的长度。
datetime.tzinfo:与时区有关的相关信息。
名称比较绕口,在实际实用中,用得比较多的是 datetime.datetime 和 datetime.timedelta ,另外两个 datetime.date 和 datetime.time 实际使用和 datetime.datetime 并无太大差别。 下面主要讲讲 datetime.datetime 的使用。使用datetime.datetime.now()可以获得当前时刻的datetime.datetime 实例。 对于一个 datetime.datetime 实例,主要会有以下属性及常用方法,看名称就能理解,应该没有太大问题:
1. datetime.year
2. datetime.month
3. datetime.day
4. datetime.hour
5. datetime.minute
6. datetime.second
7. datetime.microsecond
8. datetime.tzinfo
2. 模块属性
1) 常量
2) date类
date对象由year年份、month月份及day日期三部分构成:date(year,month,day)
a) 静态方法和字段
date.max、date.min:date对象所能表示的最大、最小日期;
date.resolution:date对象表示日期的最小单位。这里是天。
date.today():返回一个表示当前本地日期的date对象;
date.fromtimestamp(timestamp):根据给定的时间戮,返回一个date对象;
b) 方法和属性
d1 = date(2011,06,03)#date对象
d1.year、date.month、date.day:年、月、日;
d1.replace(year, month, day):生成一个新的日期对象,用参数指定的年,月,日代替原有对象中的属性。(原有对象仍保持不变)
d1.timetuple():返回日期对应的time.struct_time对象;
d1.weekday():返回weekday,如果是星期一,返回0;如果是星期2,返回1,以此类推;
d1.isoweekday():返回weekday,如果是星期一,返回1;如果是星期2,返回2,以此类推;
d1.isocalendar():返回格式如(year,month,day)的元组;
d1.isoformat():返回格式如'YYYY-MM-DD’的字符串;
d1.strftime(fmt):和time模块format相同。
c) date对象中包含的方法与属性
以上方法的返回值为TrueFalse
3) time类
time类由hour小时、minute分钟、second秒、microsecond毫秒和tzinfo五部分组成:
time([hour[, minute[, second[, microsecond[, tzinfo]]]]])
a) 静态方法和字段
time.min、time.max:time类所能表示的最小、最大时间。其中,time.min = time(0, 0, 0, 0), time.max = time(23, 59, 59, 999999);
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;
b) date对象中包含的方法与属性
以上方法的返回值为TrueFalse
4) datetime类
datetime类其实是可以看做是date类和time类的合体,其大部分的方法和属性都继承于这二个类,其数据构成也是由这二个类所有的属性所组成的:
datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
a) 静态方法和字段
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对象;
b) 方法和属性
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)
5) timedelta类
timedelta类是用来计算二个datetime对象的差值的。
此类中包含如下属性:
1、days:天数
2、microseconds:微秒数(>=0 并且 <1秒)
3、seconds:秒数(>=0 并且 <1天)
例子:
today = datetime.date.today()
today_weekday = today.isoweekday()
last_sunday = today - datetime.timedelta(days=today_weekday)
last_monday = last_sunday - datetime.timedelta(days=6)
# datetime.timedelta(days=6)这个days可以换成hours,seconds,minutes,and so on。
calendar
calendar模块,即日历模块,提供了对日期的一些操作方法,和生成日历的方法。
calendar模块中提供了三大类:
一、calendar.Calendar(firstweekday=0)
该类提供了许多生成器,如星期的生成器,某月日历生成器
二、calendar.TextCalendar(firstweekday=0)
该类提供了按月、按年生成日历字符串的方法。
三、calendar.HTMLCalendar(firstweekday=0)
类似TextCalendar,不过生成的是HTML格式日历
calendar.calendar(year,w=2,l=1,c=6)
#返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c。 每日宽度间隔为w字符。每行长度为21* W+18+2* C。l是每星期行数。
calendar.firstweekday( )
#返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。
calendar.isleap(year)
#是闰年返回True,否则为false。
calendar.leapdays(y1,y2)
#返回在Y1,Y2两年之间的闰年总数。
calendar.month(year,month,w=2,l=1)
#返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度间隔为w字符。每行的长度为7* w+6。l是每星期的行数。
calendar.monthcalendar(year,month)
#返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。Year年month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始。
calendar.monthrange(year,month)
#返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12。
calendar.prcal(year,w=2,l=1,c=6)
#相当于 print calendar.calendar(year,w,l,c).
calendar.prmonth(year,month,w=2,l=1)
#相当于 print calendar.calendar(year,w,l,c)。
calendar.setfirstweekday(weekday)
#设置每周的起始日期码。0(星期一)到6(星期日)。
calendar.timegm(tupletime)
#和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间辍(1970纪元后经过的浮点秒数)。
calendar.weekday(year,month,day)
#返回给定日期的日期码。0(星期一)到6(星期日)。月份为 1(一月) 到 12(12月)。