time、datetime、calendar

2023-05-16,,

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对象中包含的方法与属性

以上方法的返回值为True\False

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对象中包含的方法与属性

以上方法的返回值为True\False

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月)。

time、datetime、calendar的相关教程结束。

《time、datetime、calendar.doc》

下载本文的Word格式文档,以方便收藏与打印。