diff --git a/kosmorrolib/data.py b/kosmorrolib/data.py index 1fb5507..58c979b 100644 --- a/kosmorrolib/data.py +++ b/kosmorrolib/data.py @@ -30,6 +30,9 @@ def __init__( self.time = time self.next_phase_date = next_phase_date + def __repr__(self): + return "" % (self.phase_type, self.time, self.next_phase_date) + def get_next_phase(self): if self.phase_type in [MoonPhaseType.NEW_MOON, MoonPhaseType.WAXING_CRESCENT]: return MoonPhaseType.FIRST_QUARTER diff --git a/kosmorrolib/ephemerides.py b/kosmorrolib/ephemerides.py index 84b195b..74869da 100644 --- a/kosmorrolib/ephemerides.py +++ b/kosmorrolib/ephemerides.py @@ -18,7 +18,7 @@ def _get_skyfield_to_moon_phase( - times: [Time], vals: [int], now: Time + times: [Time], vals: [int], now: Time, timezone: int ) -> Union[MoonPhase, None]: tomorrow = get_timescale().utc( now.utc_datetime().year, now.utc_datetime().month, now.utc_datetime().day + 1 @@ -55,14 +55,26 @@ def _get_skyfield_to_moon_phase( return MoonPhase( current_phase, - current_phase_time.utc_datetime() if current_phase_time is not None else None, - next_phase_time.utc_datetime() if next_phase_time is not None else None, + translate_to_timezone(current_phase_time.utc_datetime(), timezone) if current_phase_time is not None else None, + translate_to_timezone(next_phase_time.utc_datetime(), timezone) if next_phase_time is not None else None, ) def get_moon_phase( - compute_date: datetime.date = datetime.date.today(), timezone: int = 0 + for_date: datetime.date = datetime.date.today(), timezone: int = 0 ) -> MoonPhase: + """Calculate and return the moon phase for the given date, adjusted to the given timezone if any. + + Get the moon phase for the 27 March, 2021: + + >>> get_moon_phase(datetime.date.fromisoformat("2021-03-27")) + + + Get the moon phase for the 27 March, 2021, in the UTC+2 timezone: + + >>> get_moon_phase(datetime.date.fromisoformat("2021-03-27"), timezone=2) + + """ earth = get_skf_objects()["earth"] moon = get_skf_objects()["moon"] sun = get_skf_objects()["sun"] @@ -76,12 +88,12 @@ def moon_phase_at(time: Time): moon_phase_at.rough_period = 7.0 # one lunar phase per week - today = get_timescale().utc(compute_date.year, compute_date.month, compute_date.day) + today = get_timescale().utc(for_date.year, for_date.month, for_date.day) time1 = get_timescale().utc( - compute_date.year, compute_date.month, compute_date.day - 10 + for_date.year, for_date.month, for_date.day - 10 ) time2 = get_timescale().utc( - compute_date.year, compute_date.month, compute_date.day + 10 + for_date.year, for_date.month, for_date.day + 10 ) try: @@ -97,7 +109,7 @@ def moon_phase_at(time: Time): raise OutOfRangeDateError(start, end) from error - return _get_skyfield_to_moon_phase(times, phase, today) + return _get_skyfield_to_moon_phase(times, phase, today, timezone) def get_ephemerides( diff --git a/tests.py b/tests.py index 11e17a8..482ab83 100644 --- a/tests.py +++ b/tests.py @@ -2,5 +2,5 @@ from kosmorrolib import * -for module in [events]: +for module in [events, ephemerides]: doctest.testmod(module, verbose=True)