我一直在考虑做一个睡眠功能,直到它被调用到某个特定日期为止。我的想法基于日期,例如:2019-01-20 12:00:00。
我还没有真正弄清楚如何开始解决这个问题。我的想法是类似
library(shiny)
ui <- fluidPage(
## initilize the value
numericInput('init.i','initial i',10),
## click this button to add one to the initial value
actionButton("run","Run"),
## output the current count
textOutput("cur.i")
)
server <- function(input,output) {
## define the current value according to the inital value
i <- reactiveVal({
input$init.i ## this line fails
##1 ## this line doesn't fail but value always initializes at 1
})
observeEvent(input$run, {
## make a new value by adding 1 to the current value
new.i <- i() + 1
## update the value
i(new.i)
output$cur.i <- renderText({
## print the current value
i()
})
})
}
shinyApp(ui=ui,server=server)
所以问题是我怎么可能能够睡到2019-01-20 12:00:00所给定的某个时间?
答案 0 :(得分:1)
您可以计算出达到唤醒时间并进入增量时间睡眠所需的时间。
Python可以按时间间隔进行计算。如果您从另一个时间戳中减去一个时间戳,则会得到datetime.timedelta
:
import datetime
import time
target = datetime.datetime(2019,1,20,12,0,0)
now = datetime.datetime.now()
delta = target - now
if delta > datetime.timedelta(0):
print('will sleep: %s' % delta)
time.sleep(delta.total_seconds())
print('just woke up')
当然,您可以将其放在函数中:
import datetime
import time
target = datetime.datetime(2019,1,20,12,0,0)
def sleep_until(target):
now = datetime.datetime.now()
delta = target - now
if delta > datetime.timedelta(0):
time.sleep(delta.total_seconds())
return True
sleep_until(target)
您可以检查返回值:仅在睡眠时才返回True。
顺便说一句:可以使用过去的日期作为目标。这将产生负数秒。睡眠为负值将不会进入睡眠状态。
如果您的时间是字符串,请使用以下命令:
target = datetime.datetime.strptime('20.1.2019 20:00:00', '%d.%m.%Y %H:%M:%s')
或
target = datetime.datetime.strptime('2019-1-20 20:00:00', '%Y-%m-%d %H:%M:%s')
答案 1 :(得分:1)
我以有效的方式解决了您的问题:
import time, datetime
# given_date --> Your target time and date
dur = time.mktime(datetime.datetime.strptime(given_date, "%d-%b-%y %H:%M:%S").timetuple()) - time.time()
time.sleep(dur)
答案 2 :(得分:0)
您可以使用while
循环。
import datetime
_theday="01/01/2019"
while datetime.today() != _theday:
some stuff
答案 3 :(得分:0)
您的意思是这样的:
from time import sleep
from datetime import datetime
x = datetime.datetime.strptime('2019-01-20 12:00:00', '%Y-%m-%d %H:%M:%S')
y = datetime.now()
sleep((max(x,y) - min(x,y)).seconds)