python进阶宝典15- 时间管理

一   主要内容包含time.time(), time.sleep(),及 datetime模块等内容,具体详见代码注释。

## time.time()返回自unix纪元1970年1月1日0点(UTC)那一刻依赖的秒数,称为unix纪元时间戳
#   另一种分析代码的方法是利用cProfile.run()函数,比time.time()方法提供了更详细的信息。
#                  参考 https://docs.python.org/3/library/profile.html 说明。
import time
def calcProd():
    # Calculate the product of the first 100000 numbers.
    product = 1
    for i in range(1,100000):
        product = product * i
    return product

startTime = time.time()           # 生成时间戳
prod = calcProd()
endTime = time.time()
print('The result is %s digits long.' % (len(str(prod))))
print('Took %s seconds to calculate.' % (endTime - startTime))

## time.sleep()
import time
time.sleep(30)
# 上面调用用来暂停30秒,注意,此时按下Ctrl-C不会中断sleep()调用,程序会等待暂停结束,再抛出KeyboardInterrupt异常。
# 要绕过这个问题,要用如下的30次循环调用来解决。
for i in range(30):
    time.sleep(1)

二 下面是一个例子描边,每一次按下回车后显示当前一轮的时间,及累积时间。

## 例子:秒表
# A simple stopwatch program.
import time
# Display the program's instructions.
print('Press ENTER to begin. Afterwards,press ENTER to "click" the stopwatch.Press Ctrl-C to quit.')
input()                      # Press Enter to begin
print('Started.')
startTime = time.time()      # Get the first lap's start time
lastTime = startTime
lapNum = 1
# Start tracking the lap times.
try:
    while True:
        input()
        lapTime = round(time.time() - lastTime, 2)
        totalTime = round(time.time() - startTime, 2)
        print('Lap #%s: %s (%s)' % (lapNum,totalTime,lapTime),end='') 
        # 由于前面有个input(),这里向print()函数传入 end='' ,避免输出重复空行
        lapNum += 1
        lastTime = time.time()    # reset the last lap time
except KeyboardInterrupt:
    # Handle the Ctrl-C exception to keep its error message from displaying.
    print('\nDone.')

输出结果如下:

python进阶宝典15- 时间管理_第1张图片

三  以下代码主要包含以下功能

1) datetime模块,datetime值表示一个具体的时刻

2)timedelta数据类型 ,表示一段时间

3)将datetime对象转换为字符串 strftime()

4)将字符串转换成 datetime对象 strptime()

具体代码如下:

## datetime模块,datetime值表示一个具体的时刻
import datetime
datetime.datetime.now()             # datetime.datetime(2018, 5, 20, 16, 22, 52, 718197)
print(datetime.datetime.now())      # 2018-05-20 16:26:38.948846
dtnow = datetime.datetime.now()
dt = datetime.datetime(2015,10,21,16,29,0)
print(dt)                           # 2015-10-21 16:29:00
print(dtnow > dt)                   # True 两个datetime对象可以比较大小
# fromtimestamp() 将unix纪元时间戳后秒数转换为 datetime对象
print(datetime.datetime.fromtimestamp(1000000))  # 1970-01-12 21:46:40  datetime.datetime(1970, 1, 12, 21, 46, 40)
datetime.datetime.fromtimestamp(time.time())     # 同datetime.datetime.now() 

## timedelta数据类型 ,表示一段时间,而不是一个时刻
# datetime.timedelta() 函数接受关键字参数weeks、days、hours、minutes、seconds、milliseconds及microseconds.
#    由于年、月时间不固定,没有year、month关键字参数。
delta = datetime.timedelta(weeks=2,days=11,hours=10,minutes=9,seconds=8)
print(delta.days,delta.seconds,delta.microseconds)   # timedelta对象拥有的总时间以天、秒、微妙来表示
print(delta.total_seconds())                         # total_seconds() 返回只以秒表示的总时间
str(delta)                                           # '25 days, 10:09:08' 转换为字符串的样子
# timedelta对象 可以与datetime对象或其他timedelta对象进行加减
dt = datetime.datetime.now()
kdays = datetime.timedelta(days=1000)
kdays = datetime.timedelta(days=500 * 2)
print(dt + kdays)                                    # datetime.datetime(2021, 2, 13, 16, 48, 23, 473549)
print(dt - (2 * kdays) )                             # timedelta对象可以乘以或除以整数或浮点数

## 控制程序暂停到某个时间
import datetime,time
t2018 = datetime.datetime(2018,10,31,0,0,0)
t = 1
try:
    while datetime.datetime.now() < t2018 :
        time.sleep(1)
        t += 1
except KeyboardInterrupt:
    print('%s seconds have gone.' % (t))
print('Time is ok,Go...')

## 将datetime对象转换为字符串 strftime()
import datetime
dt = datetime.datetime(2017,4,21,16,29,0)
dt.strftime('%Y/%m/%d %H:%M:%S')       # '2017/04/21 16:29:00'
dt.strftime("%B of '%y   %I:%M %p , %A , %w th day of week, %j th day of year")
#"October of '15   04:29 PM , Wednesday , 3 th day of week, 294 th day of year"

## 将字符串转换成 datetime对象 strptime()
# 注意必须将对应第一个参数的定制格式字符串作为第二个参数输入
import datetime
datetime.datetime.strptime('2018/05/20 16:30:00','%Y/%m/%d %H:%M:%S')
#         datetime.datetime(2018, 5, 20, 16, 30)


你可能感兴趣的:(python)