python time sleep

 
import time
time.sleep(7)
print(11)

让主程序暂时11秒后,再继续执行

time.sleep(0.1) # sleep 0.1秒

 

    

 
import time  
from tpf import log

def task_to_run():  
    print("Task is running at the specified time (or close to it).")  


def run(wait_time = 24*60*60):
    current_time = time.time()  
    target_time = current_time + wait_time  
        
    while True:  
        if time.time() >= target_time:  
            task_to_run()  
            break  # 执行完毕后退出循环  
        else:  
            time.sleep(3*60)  # 每3*60秒检查一次时间
            log("sleep",fil="run.log")

run()
    

 
run.sh 
nohup /data/jupyter/pyuban/bin/python /opt/wks/jupyter/test/run.py >/tmp/run.log 2>&1 &

下面的方式不一定生效
!sh run.sh 

可采用下面的方式
import os 
os.system("sh /opt/wks/jupyter/test/run.sh ")


 


 


 


 

  

 


python time 转字符串

time年月日时分秒

 
import time
now =time.strftime("%Y-%m-%d %H:%M:%S") 
'2023-04-25 14:18:04'

import time
now =time.strftime("%H:%M:%S") 
'14:23:32'

python 字符串转日期

 
import datetime
t=datetime.datetime.strptime('2023-05-21','%Y-%m-%d')
print(t) # 2023-05-21 00:00:00

python timedelta

timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)

 
当前日期前一天
import datetime
day1 = datetime.datetime.now() - datetime.timedelta(days=1)
day1.strftime('%Y-%m-%d')

指定日期前一天
import datetime
date_A= input('请输入日期(格式:yyyy-mm-dd):')
dayA= datetime.datetime.strptime(date_A, '%Y-%m-%d')
delta=datetime.timedelta(days=1)
dayB=dayA-delta
print("输入日期的前一天:"+dayB.strftime('%Y-%m-%d'))

0.5天

 
import datetime
day1 = datetime.datetime.now() - datetime.timedelta(days=0.5)
day1.strftime('%Y-%m-%d %H:%M:%S')
'2023-07-19 02:49:51'

python 时间转秒数

 
import datetime,time
dt = datetime.datetime(2022, 12, 21, 19, 10, 20)

# 转struct_time
tt = dt.timetuple()

# struct_time 转秒数
seconds = time.mktime(tt)

seconds
1671667820.0

python时间相减

天数相减

 
import datetime
day1 = datetime.datetime.now()
day3 = datetime.datetime.now() - datetime.timedelta(days=3)
day = day1 - day3 
day.days

输出:
2

两个日期之间的天数

 
from datetime import datetime
start_date = "2023-01-01"
end_date = "2023-07-14"

start_datetime = datetime.strptime(start_date, "%Y-%m-%d")
end_datetime = datetime.strptime(end_date, "%Y-%m-%d")

delta = end_datetime - start_datetime
days = delta.days
days
194

python测速

time.time

 
import time
start_time = time.time() # 记录程序开始时间

y=model(X=index)

end_time = time.time()  # 记录程序结束时间
tim_ms = round((end_time - start_time)*1000,2)

print("程序运行时间为", tim_ms, "毫秒")

datetime.datetime.now()

 
import datetime
start_time = datetime.datetime.now() # 记录程序开始时间

y=model(X=index)

end_time = datetime.datetime.now() # 记录程序结束时间
tim = (end_time - start_time)
print(type(tim))  # class 'datetime.timedelta'

print("程序运行时间为", tim.total_seconds() *1000,"毫秒")

timeit:可精确到微秒

 
import timeit

# 只能写简单的代码,不能写方法,不能对象调用 
code_to_test = """
for i in range(10000):
    pass
"""

elapsed_time = timeit.timeit(code_to_test, number=1)

print("代码执行1次的平均时间为:", round(elapsed_time*1000*1000), "微秒")

 
代码执行1次的平均时间为: 184 微秒

profile

 
import profile
def foo():
    for i in range(10000000):
        pass

profile.run("foo()")


5 function calls in 0.234 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.234    0.234    0.234    0.234 2673007575.py:3(foo)
     1    0.000    0.000    0.234    0.234 :0(exec)
     1    0.000    0.000    0.000    0.000 :0(setprofile)
     1    0.000    0.000    0.234    0.234 string:1(module)
     1    0.000    0.000    0.234    0.234 profile:0(foo())
     0    0.000             0.000          profile:0(profiler)

cProfile : c语言版的profile

 
import cProfile

def foo():
    for i in range(10000):
        pass

cProfile.run("foo()")


4 function calls in 0.001 seconds

Ordered by: standard name

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
     1    0.001    0.001    0.001    0.001 1155913500.py:3(foo)
     1    0.000    0.000    0.001    0.001 string:1(module)
     1    0.000    0.000    0.001    0.001 {built-in method builtins.exec}
     1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

python N月以前

当前时间N月以前,不包含N

 
import time
def month_before(n=1):
    """N月以前
    - 以12为进制计算年月
    - 202308 1月以前就是202307 
    """
    t = time.localtime(time.time())
    year=t[0]
    month=t[1]
    interval = n 
    
    interval_month = interval%12
    interval_month
    if interval <= month:
        new_month = month - interval
        new_year = year
        if new_month == 0 :
            new_year = year - 1 
            new_month = 12
    else:
        new_month = month - interval  
        interval_year  = int((0-new_month)/12)
        new_year = year - (interval_year+1)
        new_month = new_month%12
        if new_month == 0 :
            new_month = 12
        
    res = "{}{}".format(new_year, '%02d'%new_month)
    return res 
        

验证

 
当前时间:2023-08 

month_before(n=1)
'202307'

month_before(n=7)
'202301'

month_before(n=8)
'202212'

month_before(n=12)
'202208'

month_before(n=20)
'202112'

指定月份N月以前

 
def month_before2(year,month,n=1):
    """N月以前
    - 以12为进制计算年月
    - 202308 1月以前就是202307 
    """
    interval = n 
    year = int(year)
    month = int(month)
    interval_month = interval%12
    interval_month
    if interval <= month:
        new_month = month - interval
        new_year = year
        if new_month == 0 :
            new_year = year - 1 
            new_month = 12
    else:
        new_month = month - interval  
        interval_year  = int((0-new_month)/12)
        new_year = year - (interval_year+1)
        new_month = new_month%12
        if new_month == 0 :
            new_month = 12
        
    res = "{}{}".format(new_year, '%02d'%new_month)
    return res 
        

 
month_before2(2023,1,n=1,)
'202212'

month_before2(2023,11,n=1,)
'202310'

逐月取前一个月

 
m1 = "202212"
m2 = "202311"
while m2>m1:
    year = m2[:4]
    month = m2[4:6]
    res = month_before2(year,month)
    print(res)
    m2 = res
    
202310
202309
202308
202307
202306
202305
202304
202303
202302
202301
202212

一星期中的第几天

 
import datetime
t=datetime.datetime.now().isocalendar()
y,x,d = t 
if d == 0:
    d = '日'
print(f"今天是{y}年第{x}个星期,星期{d}") # 今天是2023年第21个星期,星期4

参考