【问题标题】:Check if time is between tonight and tomorrow morning检查时间是否在今晚和明天早上之间
【发布时间】:2013-12-19 20:22:04
【问题描述】:

以下条件不起作用,知道吗? Python 是否认为上午 8 点属于同一天,所以这种情况是不可能的?

from datetime import datetime, time
now = datetime.now()
now_time = now.time()
if now_time >= time(23,00) and now_time <= time(8,00): 
    try:
        print 'hall light turning on'
    except:
        print 'Could not connect to Hue gateway'

【问题讨论】:

  • 使用or 而不是and

标签: python if-statement time


【解决方案1】:

一个小时怎么可能同时 >= 23 和

尝试将and 替换为or

if now_time >= time(23,00) or now_time <= time(8,00):
    print "night"

【讨论】:

    【解决方案2】:

    Astral 是一个模块,它可以根据太阳的当前位置为您提供更准确的“夜间时间”指示。当您希望通过使用黎明到黄昏或日落到日出并指示您所在的城市来更有效地自动打开或关闭灯时,这是很好的选择。查看:https://astral.readthedocs.io/en/latest/

    示例用法:

    import pytz
    from datetime import datetime
    from astral import Astral
    a = Astral()
    city = a['Chicago'] # Replace with your city
    now = datetime.now(pytz.utc)
    sun = city.sun(date=now, local=True)
    if now >= sun['dusk'] or now <= sun['dawn']:
        print "It's dark outside"
    

    【讨论】:

      【解决方案3】:

      使用ephem package查看太阳是否升起:

      #!/usr/bin/env python
      import ephem # $ pip install ephem
      
      observer = ephem.city('Beijing') # <-- put your city here
      sun = ephem.Sun(observer)
      sun_is_up = observer.previous_rising(sun) > observer.previous_setting(sun)
      print('day' if sun_is_up else 'night')
      

      判断昼夜的逻辑来自@miara's answer。要检测暮光,请参阅Calculating dawn and sunset times using PyEphem

      【讨论】:

        【解决方案4】:

        你可以把它简化成这样

        if time(8, 00) <= now_time >= time(18, 00):
        

        下面的完整代码

        from datetime import datetime, time
        now = datetime.now()
        now_time = now.time()
        if time(8, 00) <= now_time >= time(18, 00):
            try:
                print("hall light turning on")
            except:
                print("Could not connect to Hue gateway")
        

        【讨论】:

          【解决方案5】:

          使用此逻辑来说明您何时跨越范围内的日期:

            def is_time_in_range(start, end, x):
              #true if x is in range
              if start <= end:
                   return start <= x <= end
              else:
                   return start <= x or x <= end # Understand this part.
          

          示例用法:

           import datetime
           start = datetime.time(23, 0, 0)
           end = datetime.time(8, 0, 0)
           is_time_in_range(start, end, datetime.time(23, 30, 0))
           is_time_in_range(start, end, datetime.time(09, 30, 0))
          

          第一个调用返回true 第二个返回false

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-08-12
            • 1970-01-01
            • 2020-10-24
            • 2020-02-22
            • 1970-01-01
            • 2017-01-13
            相关资源
            最近更新 更多