-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsun.py
73 lines (65 loc) · 3.61 KB
/
sun.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from pysolar.util2 import get_sunrise_sunset_transit
import pytz
import time
SUN_ZENITH_SUNRISE_SUNSET = 0 # Sunrise sunset
SUN_ZENITH_CIVIL_TWILIGHT = 1 # Civil twilight's
SUN_ZENITH_NAUTICAL_TWILIGHT = 2 # Nautical twilight's
SUN_ZENITH_ASTRO_TWILIGHT = 3 # Astronomical twilight's
class SunriseSunet:
def __init__(self, longitude, latitude, tz='UTC'):
"""
:param longitude: Долгота
:param latitude: Широта
:param tz: Временная зона для которой происходит расчёт по умолчанию UTC
"""
self.longitude = longitude
self.latitude = latitude
self.tz = pytz.timezone(tz)
def sunrise_duration(self, date):
"""
:return: Возвращает длительность рассвета от астронамического рассвета до гражданского рассвета в секундах
:param date: Дата для расчёта
"""
date = date.replace(tzinfo=self.tz)
sunrise, sunset, transit = get_sunrise_sunset_transit(self.latitude, self.longitude, date,
SUN_ZENITH_ASTRO_TWILIGHT)
astro_sunrise_timestamp = int(time.mktime(sunrise.timetuple()))
sunrise, sunset, transit = get_sunrise_sunset_transit(self.latitude, self.longitude, date,
SUN_ZENITH_CIVIL_TWILIGHT)
civil_sunrise_timestamp = int(time.mktime(sunrise.timetuple()))
sec = civil_sunrise_timestamp - astro_sunrise_timestamp
return sec
def sunset_duration(self, date):
"""
:return: Возвращает длительность заката от гражданского заката до астронамического заката в секундах
:param date: Дата для расчёта
"""
date = date.replace(tzinfo=self.tz)
sunrise, sunset, transit = get_sunrise_sunset_transit(self.latitude, self.longitude, date,
SUN_ZENITH_ASTRO_TWILIGHT)
astro_sunset_timestamp = int(time.mktime(sunrise.timetuple()))
sunrise, sunset, transit = get_sunrise_sunset_transit(self.latitude, self.longitude, date,
SUN_ZENITH_CIVIL_TWILIGHT)
civil_sunset_timestamp = int(time.mktime(sunrise.timetuple()))
sec = civil_sunset_timestamp - astro_sunset_timestamp
return sec
def sunrise_start(self, date):
"""
:return: Возвращает время начала астрономического рассвета в формате H:M:S
:param date: Дата для расчёта
"""
date = date.replace(tzinfo=self.tz)
sunrise, sunset, transit = get_sunrise_sunset_transit(self.latitude, self.longitude, date,
SUN_ZENITH_ASTRO_TWILIGHT)
result = sunrise.strftime('%H:%M:%S')
return result
def sunset_start(self, date):
"""
:return: Возвращает время начала гражданского заката в формате H:M:S
:param date: Дата для расчёта
"""
date = date.replace(tzinfo=self.tz)
sunrise, sunset, transit = get_sunrise_sunset_transit(self.latitude, self.longitude, date,
SUN_ZENITH_CIVIL_TWILIGHT)
result = sunset.strftime('%H:%M:%S')
return result