7.22 Python 日期和时间
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。
Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。
时间间隔是以秒为单位的浮点小数。
每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。
时间戳单位最适于做日期运算。但是1970年之前的日期就无法以此表示了。太遥远的日期也不行,UNIX和Windows只支持到2038年。
Python 的 time 模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳, 如下实例:
import time
ticks=time.time()
print(ticks)
1658584866.8697731
时间元组
很多Python函数用一个元组装起来的9组数字处理时间:
序号 |
字段 |
值 |
0 |
4位数年 |
2008 |
1 |
月 |
1 到 12 |
2 |
日 |
1到31 |
3 |
小时 |
0到23 |
4 |
分钟 |
0到59 |
5 |
秒 |
0到61 (60或61 是闰秒) |
6 |
一周的第几日 |
0到6 (0是周一) |
7 |
一年的第几日 |
1到366 (儒略历) |
8 |
夏令时 |
-1, 0, 1, -1是决定是否为夏令时的旗帜 |
上述也就是struct_time元组。这种结构具有如下属性:
序号 |
属性 |
值 |
0 |
tm_year |
2008 |
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 (60或61 是闰秒) |
6 |
tm_wday |
0到6 (0是周一) |
7 |
tm_yday |
1 到 366(儒略历) |
8 |
tm_isdst |
-1, 0, 1, -1是决定是否为夏令时的旗帜 |
获取当前时间
从返回浮点数的时间戳方式向时间元组转换,只要将浮点数传递给如localtime之类的函数。
例子:
import time
ticks=time.localtime(time.time())
print(ticks)
time.struct_time(tm_year=2022, tm_mon=7, tm_mday=23, tm_hour=22, tm_min=4, tm_sec=7, tm_wday=5, tm_yday=204, tm_isdst=0)
获取格式化的时间
你可以根据需求选取各种格式,但是最简单的获取可读的时间模式的函数是asctime():
import time
ticks=time.asctime(time.localtime(time.time()))
print(ticks)
Sat Jul 23 22:06:07 2022
格式化日期
我们可以使用 time 模块的 strftime 方法来格式化日期:
time.strftime(format[, t])
例子:
import time
ticks=time.asctime(time.localtime(time.time()))
print(ticks)
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
a = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))
Sat Jul 23 22:12:01 2022
2022-07-23 22:12:01
Sat Jul 23 22:12:01 2022
1459175064.0
Mktime:将时间转换为自1970年1月1日以来逝去时间的秒数,发生错误时返回-1.
python中时间日期格式化符号:
%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00-59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
获取某月日历
Calendar模块有很广泛的方法用来处理年历和月历,例如打印某月的月历:
import calendar
cal = calendar.month(2022, 6)
print("以下输出2020年6月份的日历:")
print(cal)
以下输出2020年6月份的日历:
June 2022
Mo Tu We Th Fr Sa Su
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Time 模块
Time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的:
序号 |
函数及描述 |
1 |
time.altzone |
2 |
time.asctime([tupletime]) |
3 |
time.clock( ) |
4 |
time.ctime([secs]) |
5 |
time.gmtime([secs]) |
6 |
time.localtime([secs]) |
7 |
time.mktime(tupletime) |
8 |
time.sleep(secs) |
9 |
time.strftime(fmt[,tupletime]) |
10 |
time.strptime(str,fmt='%a %b %d %H:%M:%S %Y') |
11 |
time.time( ) |
12 |
time.tzset() |
Time模块包含了以下2个非常重要的属性:
序号 |
属性及描述 |
1 |
time.timezone |
2 |
time.tzname |
日历(Calendar)模块
此模块的函数都是日历相关的,例如打印某月的字符月历。
星期一是默认的每周第一天,星期天是默认的最后一天。更改设置需调用calendar.setfirstweekday()函数。模块包含了以下内置函数:
序号 |
函数及描述 |
1 |
calendar.calendar(year,w=2,l=1,c=6) |
2 |
calendar.firstweekday( ) |
3 |
calendar.isleap(year) 是闰年返回 True,否则为 False。 >>> import calendar>>> print(calendar.isleap(2000))True>>> print(calendar.isleap(1900))False |
4 |
calendar.leapdays(y1,y2) |
5 |
calendar.month(year,month,w=2,l=1) |
6 |
calendar.monthcalendar(year,month) |
7 |
calendar.monthrange(year,month) |
8 |
calendar.prcal(year,w=2,l=1,c=6) |
9 |
calendar.prmonth(year,month,w=2,l=1) |
10 |
calendar.setfirstweekday(weekday) |
11 |
calendar.timegm(tupletime) |
12 |
calendar.weekday(year,month,day) |
Python 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
语法
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。
实例
以下为一个简单的Python函数,它将一个字符串作为传入参数,再打印到标准显示设备上。
def printme( str ):
"打印传入的字符串到标准显示设备上"
print str
return
函数调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
如下实例调用了printme()函数:
def printme( str ):
"打印任何传入的字符串"
print str
return
# 调用函数
printme("我要调用用户自定义函数!")
printme("再次调用同一函数")