考虑一家商店,营业时间为上午9:15,下午3:30营业。根据商店开放或关闭时我想要打印的时间。 我对逻辑有困难。在我的代码中,如果时间是上午9:45,则输出结束。
import time
timenow = time.localtime()
print(timenow)
print(timenow.tm_hour)
print(timenow.tm_min)
if ((timenow.tm_hour >= 9) & (timenow.tm_min >= 15)):
if((timenow.tm_hour <= 15) & (timenow.tm_min <= 30)):
print('Store open.')
else:
print('Store closed.')
如果有更好的方法,我真的很感谢你的帮助。
答案 0 :(得分:2)
我提出了一个非常简单且非花哨的代码。我可以评论一下,但我仍然没有足够的声誉。只需将您的小时转换为这样的分钟
import time
def time_to_min(hour, minute):
return hour*60+minute
timenow = time.localtime()
open_time = time_to_min(9, 15)
close_time = time_to_min(15, 30)
current_time = time_to_min(timenow.tm_hour, timenow.tm_min)
if current_time >= open_time and current_time <= close_time:
print 'Store opened'
else:
print 'Store closed'
答案 1 :(得分:1)
使用datetime,我觉得更容易:
import datetime
# define the opening hours
startTime = datetime.time(9, 15, 0)
endTime = datetime.time(15, 30, 0)
# function that compares the given time against opening and closing
def isOpen(startTime, endTime, x):
if startTime <= endTime:
return startTime <= x <= endTime
else:
return startTime <= x or x <= endTime
# Call isOpen function ( datetime.time is the "current time" )
print isOpen(startTime, endTime, datetime.time(14, 30, 0))
print isOpen(startTime, endTime, datetime.time(20, 30, 0))
如果你想在当前时间运行它,只需像这样调用函数:
currentTime = datetime.datetime.now().time()
print isOpen(startTime, endTime, currentTime)
答案 2 :(得分:1)
首先您使用时间模块。在这种情况下,这不是下面的最佳解决方案,我将解释原因。大多数情况下,时间模块调用平台主机的C库。也就是说,相同功能的行为和结果在不同的操作系统上会有所不同。
其次,代码不使用时区,这当然会导致严重的应用程序错误。
示例:
In [38]: time.localtime()
Out[38]: time.struct_time(tm_year=2018, tm_mon=2, tm_mday=16, tm_hour=5, tm_min=56, tm_sec=49, tm_wday=4, tm_yday=47, tm_isdst=0)
以GMT显示但我的实际时间是
root@xxx# date
Fri Feb 16 13:57:55 +08 2018
我们在这里遇到时区。
时区是全球的一个区域,为法律,商业和社会目的遵守统一的标准时间。时区倾向于遵循国家及其细分的界限,因为对于密切商业或其他通信的区域来说,它们可以方便地保持同一时间。
在Python中,使用时间和日期的最佳方法是 datetime 模块用于操作, pytz 用于时区。
Pytz并不是标准Python的lib,所以不要忘记安装它pip install pytz
有两种日期和时间对象:“天真”和“意识”。
感知对象充分了解适用的算法和政治时间调整,例如时区和夏令时信息,以便相对于其他感知对象定位自身。知觉对象用于表示不能解释的特定时刻。
天真对象不包含足够的信息,无法明确地相对于其他日期/时间对象定位自己。天真物体是代表协调世界时(UTC),当地时间还是某个其他时区的时间完全取决于程序,就像程序一样,特定数字代表米,英里或质量。天真的物体易于理解和使用,代价是忽视现实的某些方面
在现实世界的应用程序中,我们始终使用&#34;意识到&#34;日期时间对象。
示例:
import datetime
import pytz
tz = pytz.timezone('Singapore')
datetime.datetime.now(tz)
datetime.datetime(2018, 2, 16, 14, 15, 6, 822038, tzinfo=<DstTzInfo 'Singapore' +08+8:00:00 STD>)
现在我们有适当时区的正确时间。我们不需要关心日期时间对象下的操作。
例如,您想显示新加坡 - 曼谷的航班时间。 SNG和BKK时区之间的时差为1小时。所以当新加坡的14:00在曼谷的13:00。所有航空公司都遵守同样的规则。出发和到达时间以当地时间GMT偏移量表示。让我们假设SNG和BKK之间的实际飞行时间是1小时,我们将有SNG离开14:00 +8 - BKK到达14:00 +7。 因此,如果我们忽略出发和到达之间的时区差异 将是0小时,我们显示的飞行时间将是0小时。那当然是个错误。也不要忘记DST规则,闰年等等。但是如果你使用datetime&#34;意识到&#34;你不必担心任何事情。
总结以上所有内容,让我们重写代码
import datetime
import pytz
def shop_is_open(tz='Singapore'):
tz = pytz.timezone(tz)
time_now = datetime.datetime.now(tz).time()
#here we could apply any timezone according shop geo location
time_open = datetime.time(9, 45, tzinfo=tz)
time_close = datetime.time(15, 30, tzinfo=tz)
is_open = False
if time_now >= time_open and time_now <= time_close:
is_open = True
return is_open