我试图将当前时间(A)与当天的某个时间(B)进行比较。随后,根据比较结果,我想在明天(C)或后天(D)返回特定时间的POSIX时间。
举例说明:
假设我们当前时间(A)为12:00。 我想将其与(B)进行比较,即今天20:00。
由于A< B,我想明天13:00返回,格式化为POSIX时间。
另一个例子:
现在假设当前时间(A)是21:00。 我仍然希望将其与(B)进行比较,即今天20:00。
由于A> B,我希望明天之后返回13:00,再次格式化为POSIX时间。
我一直在尝试使用time
和datetime
库来完成这项工作,但在使用time
时,我很难找到B并且在使用{{1时我无法找到一种方法将C和D作为POSIX时间返回。
我是否正确识别了应该使用哪些库?如果是,我缺少什么?
答案 0 :(得分:2)
有两个问题:
20:00
<的当前时间,确定您是否需要“明天13:00”或“后天13:00” / LI>
第一个很简单:
#!/usr/bin/env python
import datetime as DT
current_time = DT.datetime.now()
one_or_two = 1 if current_time.time() < DT.time(20, 0) else 2
target_date = current_time.date() + DT.timedelta(days=one_or_two)
target_time = DT.datetime.combine(target_date, DT.time(13, 0))
注意:00:00
被视为小于20:00
。您可能希望使用时间间隔,例如20:00-8:00
与8:00-20:00
对find out whether the current time is in between。
第二个问题与How do I convert local time to UTC in Python?基本相同在一般情况下,没有确切的答案,例如,相同的本地时间可能会发生两次或者可能完全丢失 - 使用的答案取决于具体的应用。请参阅我对python converting string in localtime to UTC epoch timestamp的回复中的详细信息。
要获得正确的结果,要考虑可能的DST转换或现在与目标时间之间的本地UTC偏移的其他变化(例如,“后天”):
import pytz # $ pip install pytz
import tzlocal # $ pip install tzlocal
epoch = DT.datetime(1970,1,1, tzinfo=pytz.utc)
local_timezone = tzlocal.getlocalzone()
timezone_aware_dt = local_timezone.localize(target_time, is_dst=None)
posix_time = (timezone_aware_dt - epoch).total_seconds()
注意:is_dst=None
用于断言给定的本地时间存在且明确无误,例如,当地时间13:00没有DST转换。
如果time.mktime()
可以访问您平台上的历史时区数据库(或者您只是不关心本地utc偏移的变化),那么您可以仅使用stdlib找到“纪元”时间:
import time
unix_time = time.mktime(target_time.timetuple())
您可以在Find if 24 hrs have passed between datetimes - Python中阅读有关何时失败以及如何解决此问题的详细信息。
或者你可能想知道如何在Python中找到POSIX时间戳,可以在Converting datetime.date to UTC timestamp in Python中找到。
答案 1 :(得分:0)
import datetime
A = datetime.datetime.now()
# A = A.replace(hour=21, minute=5) # This line simlulates "after 21:00"
B = A.replace(hour=20, minute=0, second=0, microsecond=0) # 20:00 today
if A < B:
print A.replace(hour=13, minute=0, second=0, microsecond=0) + datetime.timedelta(days=1) # 13:00 tomorrow
else:
print A.replace(hour=13, minute=0, second=0, microsecond=0) + datetime.timedelta(days=2) # 13:00 the day after
在Python 3中,您可以返回
X.timestamp()
在Python 2中你可以使用
def timestamp(dt):
return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
timestamp(X)