时间是一个永恒的话题,在刚才的打字片刻,它就在指尖的缝隙中,像溪水般沿着山涧,飘落,蒸发。
我们可以手动将计算机的系统时钟设置为特定的日期、时间和时区,也可以手动设置任务计划提醒我们去做某事,但人的记忆是那么的不可靠,当时间的安排挤得你透不过气来,忘记也是当然的事。
Time
Python的内置的 time 模块让 Python程序能读取系统时钟的当前时间。
time.time()函数
Unix 纪元是编程中经常参考的时间:1970年1月1日0点,即协调世界时(UTC)。time.time()函数返回自那一刻以来的秒数,是一个浮点值,而这个数字称为 UNIX 纪元时间戳。
1 2 3
| import time time.time()
|
1 2 3 4 5 6 7 8 9 10 11
| t_timestamp = 817961652
t_struct_time = time.localtime(t_timestamp)
print(t_struct_time.tm_year,t_struct_time.tm_mon)
time.asctime(t_struct_time)
|
strftime
| strftime 指令 |
含义 |
| %Y |
带世纪的年份,例如’2014’ |
| %y |
不带世纪的年份,‘00’至’99’(1970 至 2069) |
| %m |
数字表示的月份, ‘01’至’12’ |
| %B |
完整的月份,例如’November’ |
| %b |
简写的月份,例如’Nov’ |
| %d |
一月中的第几天,‘01’至’31’ |
| %j |
一年中的第几天,‘001’至’366’ |
| %w |
一周中的第几天,‘0’(周日)至’6’(周六) |
| %A |
完整的周几,例如’Monday’ |
| %a |
简写的周几,例如’Mon’ |
| %H |
小时(24 小时时钟),‘00’至’23’ |
| %I |
小时(12 小时时钟),‘01’至’12’ |
| %M |
分,‘00’至’59’ |
| %S |
秒,‘00’至’59’ |
| %p |
‘AM’或’PM’ |
| %% |
就是’%'字符 |
1 2 3 4 5 6 7 8 9 10 11 12 13
| time.strftime("%Y-%m-%d",t_struct_time)
time.strftime("%Y-%m-%d %H:%M:%S",t_struct_time)
time.strftime("%y-%m-%d %H:%M:%S",t_struct_time)
time.strftime("%D %H:%M:%S",t_struct_time)
time.strftime("%Y %b %d %H:%M:%S %a +0000", t_struct_time)
time.ctime(t_timestamp)
|
1 2 3 4 5 6 7 8
| t_time = '12/03/95 11:34:12' t_struct_time = time.strptime(t_time,"%m/%d/%y %H:%M:%S")
time.mktime(t_struct_time)
time.strftime("%Y-%m-%d %H:%M:%S",t_struct_time)
|
Datetime
datetime 比 time 高级了不少,可以理解为js里的Moment.js。在datetime 模块中包含了几个类,具体关系如下:
| 函数 |
|
| timedelta |
主要用于计算时间跨度 |
| tzinfo |
时区相关 |
| time |
只关注时间 |
| date |
只关注日期 |
| datetime |
同时有时间和日期 |
使用datetime.datetime.now()可以的datetime.datetime 实例。 对于一个 datetime.datetime 实例,主要会有以下属性及常用方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| from datetime import *
datetime.now()
datetime.utcnow()
d = datetime.now() print('%s/%s/%s %d:%d:%d.%d'%(d.year,d.month,d.day,d.hour,d.minute,d.second,d.microsecond))
d.tzinfo
d.date()
d.time()
|
其他的话,
| 方法 |
|
| datetime.timetuple() |
返time.struct_time 对象 |
| datetime.strftime(format) |
按照format进行格式化输出 |
| datetime.fromtimestamp(timestamp[, tz]) |
由Unix Timestamp 构建对象 |
| datetime.strptime(date_string, format) |
给定时间格式解析字符串 |
1 2
| datetime.datetime.fromtimestamp(1000000)
|
Strftime
strftime的用法与time模块基本相同。
1 2 3 4 5 6
| datetime.strptime('March 17, 2020', '%B %d, %Y')
datetime.strptime('2019/10/21 16:29:00', '%Y/%m/%d %H:%M:%S')
datetime.strptime("October of '19", "%B of '%y")
|
Delta
由于代码运行中时间的不确定性,我们创建一个固定的时间对象吧,
1 2 3 4 5 6 7 8
| delta = timedelta(days=25, hours=5, minutes=20, seconds=0) delta.days, delta.seconds, delta.microseconds
(11, 36548, 0) delta.total_seconds()
str(delta)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| dt = datetime(2020, 1, 1, 12, 0, 0) delta1 = timedelta(hours=25) print(dt + delta1)
print(dt - delta1)
newyears2020 = datetime(2020, 1, 1, 0, 0, 0) Jan31_2020 = datetime(2020, 1, 31, 0, 0, 0) newyears2020 > Jan31_2020
newyears2020 == Jan31_2020 - timedelta(hours=30*24)
newyears2020 == Jan31_2020 - timedelta(days=30)
|
Calendar
1 2 3 4 5 6
| import calendar
yy = int(input("输入年份: ")) mm = int(input("输入月份: "))
print(calendar.month(yy,mm))
|
1 2 3 4 5 6 7 8 9
| 输入年份: 2020 输入月份: 2 February 2020 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
|
1 2 3 4 5
| monthRange = calendar.monthrange(2020,8) monthRange
calendar.mdays
|
REFERENCES