分享

「Python编程」自由管理时间之编写一个小闹钟起床

 静幻堂 2018-11-18
轻松学习Linux 2018-11-17 22:07:01

Python_时间管理

代码中的时间

  • 时间戳(Timestamp):1473525444
  • 时间字符串(Format String):2015-02-14 11:25:11
  • 结构化时间:(struct_time):(year=2018, monch=5, day=1, hour=16, min=12, sec=6)

1、常用的时间模块

  • time
  • datetime
  • python-dateutil(pip install)

常用的操作:

  • 时间各种格式的表示
  • 各种加减运算

使用time模块

#!/usr/bin/env python
import time
print(time.time())
>>>1542443575.7989876 # time.time() 输出的结果为时间戳

例1:使用时间戳来判断代码运行的时间

#!/usr/bin/env python
import time
def case():
start_time = time.time()
Your_name = input("Please enter your name:")
Your_pwd = input("Please enter your password:")
stop_time = time.time()
print(f"恭喜您输入成功,用时时间为{stop_time - start_time}秒")
if __name__ == "__main__":
case()
>>> 输出结果为:
Please enter your name:延凯
Please enter your password:pwd23
恭喜您输入成功,用时时间为4.129451036453247秒

使用time.sleep()

#!/usr/bin/env python
import time
for i in range(6):
time.sleep(1)
print(i)
>>>
0
-----------每隔一秒输出内容
1
-----------每隔一秒输出内容
2
-----------每隔一秒输出内容
3
-----------每隔一秒输出内容
4
-----------每隔一秒输出内容
5

二、结构化时间与时间戳的转换

2.1、结构化时间使用time.localtime()模块如下:

print(time.localtime()) # 此结构化时间输出的内容为当前的结构化时间
>>>time.struct_time(tm_year=2018, tm_mon=11, tm_mday=17, tm_hour=16, tm_min=43, tm_sec=53, tm_wday=5, tm_yday=321, tm_isdst=0)

例1:将时间戳转换为结构化时间

print(time.localtime(1525617114)) # 括号中的数字为时间戳,此代码能够将时间戳转换为结构化时间,输出如下:
>>>time.struct_time(tm_year=2018, tm_mon=5, tm_mday=6, tm_hour=22, tm_min=31, tm_sec=54, tm_wday=6, tm_yday=126, tm_isdst=0)

例2:将结构化时间转换为时间戳

print(time.mktime(time.struct_time(time.localtime()))) # 括号中的time.localtime() 获取当前的结构化时间,使用mktime 将结构化时间转换为时间戳
>>>>1542444612.0 #

三、结构化时间与字符串类型时间的转换

例1:将结构化时间转换为字符串类型的时间

print(time.strftime("%Y-%m-%d %X", time.localtime())) # 使用time.strftime()
>>>2018-11-17 16:52:34
# %Y == 年 == year
# %m == 月 == month
# %d == 日 == day
# %X === 表示当前时间

例2:将字符串类型的时间转换为结构化的时间

print(time.strptime("2018-11-17 17:03:29","%Y-%m-%d %X"))
>>> time.struct_time(tm_year=2018, tm_mon=11, tm_mday=17, tm_hour=17, tm_min=3, tm_sec=29, tm_wday=5, tm_yday=321, tm_isdst=-1)

四、datetime模块的应用

4.1、time和datetime的区别?

time

Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。

该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。 需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。另外一点是,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 - 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好

datetime

datetime 比 time 高级了不少,可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。在datetime 模块中包含了几个类,具体关系如下:

  • timedelta # 主要用于计算时间跨度
  • tzinfo # 时区相关
  • time # 只关注时间
  • date # 只关注日期
  • datetime # 同时有时间和日期

4.2、使用datetime

使用datetime.now查看当前的时间

#!/usr/bin/env python
# -*- coding:utf-8 -*-
print(datetime.now())
>>>2018-11-17 17:17:26.024017

例1:格式化输出时间

from datetime import datetime
print("{dt:%Y-%m-%d}".format(dt=datetime.now()))
>>>2018-11-17

例2:使用string输出

print(f"{datetime.now():%Y-%m-%d}")
>>>2018-11-17

4.3、使用date

from datetime import date # 导入date方法
D = date(2018, 11, 6) # date() 可直接自定义日期
print(D)

例1:使用date.today() 查看当前日期

from datetime import date
D = date.today()
print(D)
>>> 2018-11-17

4.4、使用time

from datetime import time
T = time(11, 6)
print(T)
>>>11:06:00

五、时间中的各种计算

使用时间计算,我们需要用到timedelta

例1:

D = timedelta(days=1)
print(D)
>>> 1 day, 0:00:00

例2:

H = timedelta(hours=3)
print(H)
>>>3:00:00

例3:

DT = timedelta(days=1, hours=3)
print(DT)
>>>1 day, 3:00:00

例4:时间的相加如下:

from datetime import timedelta
from datetime import date
dt = date.today()
D = timedelta(days=1, hours=3)
print(f"今日的时间为{dt},加了{D}时间,最终的时间为:{dt + D}")
>>> 今日的时间为2018-11-17,加了1 day, 3:00:00时间,最终的时间为:2018-11-18

例5:同时时间也可以相乘

from datetime import timedelta
from datetime import date
dt = date.today()
D = timedelta(days=1, hours=3)
print(f"今日的时间为{dt},加了{D}时间,时间为:{dt + D}随后又乘了10天 最终结果为:{dt + D * 10}")
>>>今日的时间为2018-11-17,加了1 day, 3:00:00时间,时间为:2018-11-18随后又乘了10天 最终结果为:2018-11-28

六、从时间戳生成datetime

import time
from datetime import datetime
dt = time.time()
print(datetime.utcfromtimestamp(dt))
>>>2018-11-17 10:08:44.600438

七、格式化字符串表示时间

  • strftime: % -> 1999-12-12, 把代码里面的时间对象转成人类认识的字符串,f:format
  • strptime: 2000-12-12 -> object,把人类认识的字符串,转成代码里面的对象,p,parse
from datetime import datetime
dt = datetime(2018, 11, 6, 11, 13, 59)
print(dt)
print(dt.strftime("%Y/%m/%d %X"))
print(dt.strptime("2018/11/06 11:13:59", "%Y/%m/%d %X"))
>>>
2018-11-06 11:13:59
2018/11/06 11:13:59
2018-11-06 11:13:59

八、使用dateutil更好的控制时间

pip install python-timeutil # 安装timeutil

案例1:查看这周的周三是几号

D = datetime.now()
print(D + relativedelta(weekday=WE, weeks=-1))

案例2:查看下周的周三是几号

print(D + relativedelta(weekday=WE))

案例3:查看下下周的周三是几号

print(D + relativedelta(weekday=WE, weeks=1))

案例4:查看上周的周三是几号

print(D + relativedelta(weekday=WE, weeks=-2))

案例5:查看上上周的周三是几号

print(D + relativedelta(weekday=WE, weeks=-3))

输出结果

2018-11-14 18:35:00.375102
2018-11-21 18:35:00.375102
2018-11-28 18:35:00.375102
2018-11-07 18:35:00.375102
2018-10-31 18:35:00.375102

过一个月,三个月是哪天?

from datetime import date
print(date(2018, 1, 30) + relativedelta(months=+4))
print(date(2018, 1, 30) + relativedelta(months=-4))
>>>
2018-05-30
2017-09-30

实例:编写一个闹钟

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import time
import subprocess
set_time = input("请您设置闹钟时间(例如:8:00):")
print("当前的时间为:")
def clock():
start = True
while start:
local_time = time.localtime()
now = time.strftime("%H:%M:%S", local_time)
print(now + " ", end="", flush=True)
if now[:5] == set_time.rjust(5, "0"):
print("起床时间到了!!!!!!")
subprocess.Popen(["start", "好运来.mp3"], shell=True)
start = False
clock()
「Python编程」自由管理时间之编写一个小闹钟起床

「Python编程」自由管理时间之编写一个小闹钟起床

歌声随风响起~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多