Javascript oder Python – Wie finde ich heraus, ob es Nacht oder Tag ist?

Jede Idee, wie ich herausfinden, ob es derzeit Nacht / Tag oder Sonnenaufgang / Morgendämmerung auf Zeit und Ort des Benutzers ist?

Ich habe nichts Nützliches gefunden, das ich innerhalb des Kunden oder des Backends verwenden könnte.

Was macht es schwierig ist die Stunde nicht unbedingt definieren, wenn es Nacht und Tag ist, das hängt ziemlich viel auf das Jahr, Monat, Tag, Stunde und Geo-Koordinaten.


Zur Klärung … so etwas zu emulieren.

Bildbeschreibung hier eingeben


Ein Weg, um dies zu approximieren wäre auch sehr nützlich.


Hoffe, dass jemand helfen kann!

3 Solutions collect form web for “Javascript oder Python – Wie finde ich heraus, ob es Nacht oder Tag ist?”

Sie können tun, wie ich tat und verwenden Sie diese Public Domain Sun.py Modul, um die Position der Sonne relativ zu Positionen auf der Erde zu berechnen. Es ist ziemlich alt, hat aber seit vielen Jahren gut für mich gearbeitet. Ich habe ein paar oberflächliche Modifikationen dazu gemacht, um mit Python 2.7 aktueller zu sein, wie zum Beispiel die wenigen Klassen in neuem Stil zu machen, aber zum größten Teil ist es unverändert.

Hier ist ein Modul, das ich erstellt habe, genannt sunriseset.py, das zeigt, wie man es benutzt, um die Sonnenaufgangs- und Sonnenuntergangzeiten für einen bestimmten Ort zu berechnen, da seine geographischen Koordinaten und Zeitzone sind. Das referenzierte timezone ist eine Implementierung der tzinfo abstrakten Basisklasse, die in der Dokumentation des datetime Moduls zu tzinfo Objekten beschrieben ist .

 # -*- coding: iso-8859-1 -*- import datetime import timezone # concrete tzinfo subclass based on the Python docs import math from Sun import Sun __all__ = ['getsuninfo', 'Place'] class Place(object): def __init__(self, name, coords, tz=timezone.Pacific): self.name = name # string self.coords = coords # tuple (E/W long, N/S lat) self.tz = tz # tzinfo constant def _hoursmins(hours): """Convert floating point decimal time in hours to integer hrs,mins""" frac,h = math.modf(hours) m = round(frac*60, 0) if m == 60: # rounded up to next hour h += 1; m = 0 return int(h),int(m) def _ymd(date): """Return y,m,d from datetime object as tuple""" return date.timetuple()[:3] def getsuninfo(location, date=None): """Return local datetime of sunrise, sunset, and length of day in hrs,mins)""" if date == None: querydate = datetime.date.today() else: # date given should be datetime instance querydate = date args = _ymd(querydate) + location.coords utcrise, utcset = Sun().sunRiseSet(*args) daylength = Sun().dayLength(*args) hrs,mins = _hoursmins(daylength) risehour, risemin = _hoursmins(utcrise) sethour, setmin = _hoursmins(utcset) # convert times to timedelta values (ie from midnight utc of the date) midnight = datetime.datetime(tzinfo=timezone.utc, *_ymd(querydate)) deltarise = datetime.timedelta(hours=risehour, minutes=risemin) utcdatetimerise = midnight+deltarise deltaset = datetime.timedelta(hours=sethour, minutes=setmin) utcdatetimeset = midnight+deltaset # convert results from UTC time to local time of location localrise = utcdatetimerise.astimezone(location.tz) localset = utcdatetimeset.astimezone(location.tz) return localrise, localset, hrs, mins if __name__ == "__main__": import datetime, timezone def unittest(location, testdate): risetime, settime, hrs, mins = getsuninfo(location, testdate) print "Location:", location.name print "Date:", testdate.strftime("%a %x") print risetime.strftime("Sunrise %I:%M %p"), settime.strftime("- Sunset %I:%M %p (%Z)") print "daylight: %d:%02d" % (hrs,mins) print place = Place("My House", (-121.990278, 47.204444), timezone.Pacific) # test dates just before and after DST transitions print "pre 2007" print "=========" unittest(place, datetime.date(2006, 4, 1)) unittest(place, datetime.date(2006, 4, 2)) unittest(place, datetime.date(2006, 10, 28)) unittest(place, datetime.date(2006, 10, 29)) print "2007" print "=========" unittest(place, datetime.date(2007, 3, 10)) unittest(place, datetime.date(2007, 3, 11)) unittest(place, datetime.date(2007, 11, 3)) unittest(place, datetime.date(2007, 11, 4)) 

Eine prägnante Beschreibung eines Algorithmus zur Berechnung des Sonnenaufgangs und des Sonnenuntergangs wird von der United States Naval Observatory zur Verfügung gestellt: hier erhältlich:

http://williams.best.vwh.net/sunrise_sunset_algorithm.htm

Zusätzlich zur Bereitstellung von Datum und Ort müssen Sie auch einen Zenith-Winkel auswählen (bei dem die Sonne als "gestiegen" oder "gesetzt" betrachtet wird) – die verknüpfte Seite hat mehrere Möglichkeiten.

PyEphem kann verwendet werden, um die Zeit zum nächsten Sonnenaufgang und Sonnenuntergang zu berechnen. Aufbauend auf einem Blog-Post, den ich gefunden habe und die Dokumentation des Aufstiegs , kann dein Problem wie folgt gelöst werden. Nehmen wir an, ich bin dein Benutzer, und mein Standort ist Oldenburg (Oldb), Deutschland .

 import ephem user = ephem.Observer() user.lat = '53.143889' # See wikipedia.org/Oldenburg user.lon = '8.213889' # See wikipedia.org/Oldenburg user.elevation = 4 # See wikipedia.org/Oldenburg user.temp = 20 # current air temperature gathered manually user.pressure = 1019.5 # current air pressure gathered manually next_sunrise_datetime = user.next_rising(ephem.Sun()).datetime() next_sunset_datetime = user.next_setting(ephem.Sun()).datetime() # If it is daytime, we will see a sunset sooner than a sunrise. it_is_day = next_sunset_datetime < next_sunrise_datetime print("It's day." if it_is_day else "It's night.") # If it is nighttime, we will see a sunrise sooner than a sunset. it_is_night = next_sunrise_datetime < next_sunset_datetime print("It's night." if it_is_night else "It's day.") 

Notizen

  • Aus irgendeinem Grund lat und lon müssen Strings sein, aber Ephem klagt nicht, wenn sie schwimmt.
  • Für beste Ergebnisse, möchten Sie vielleicht die aktuelle Lufttemperatur und Luftdruck zu bekommen.

Voraussetzungen

Dies sollte mit mindestens Python 2.7 (mit pip-2.7 install pyephem ) und Python 3.2 (mit pip-3.2 install ephem ) zu arbeiten.

Stellen Sie sicher, dass ein Netzwerk-Zeit-Protokoll-Client auf dem System ausgeführt wird. ZB auf Debian Linux:

 $ sudo apt-get install ntp $ sudo /etc/init.d/ntp start 

Achten Sie darauf, dass die richtige Zeitzone auf Ihrem System eingestellt ist. ZB auf Debian Linux:

 $ sudo dpkg-reconfigure tzdata 
  • Umwandlung von Zeitzonen aus Pandas Zeitstempel
  • Python: Wie bekomme ich einen Wert von datetime.today () das ist "timezone bewusst"?
  • Holen Sie sich Zeitzone Abkürzung von UTC Offset
  • Pytz - Umwandlung von UTC und Zeitzone in Ortszeit
  • Ist Python's time.time () zeitzonenspezifisch?
  • Gibt es einen Weg, um Gebietsschema aus Land oder Zeitzone zu bekommen?
  • Python-Zeitzonenumwandlung
  • Einstellen der Zeitzone in Python
  • Python: Zeigt die Zeit in einer anderen Zeitzone an
  • Python-tz bin ich falsch oder es ist ein Fehler
  • Python / Django MySQL Datetime Handling und Zeitzone
  • Python ist die beste Programmiersprache der Welt.