과학적이거나 기술적인

춘분, 하지, 추분, 동지

Hoze 2022. 11. 9. 17:53

춘분을 흔히 봄에 낮과 밤의 길이가 같은 날이라고 하지만, 엄밀히 말해 태양이 황경(黃經) 0도를 지날 때, 또는 황도를 지나 북쪽으로 올라가기 시작하는 때를 말한다. 이를 구하는 공식이 너무 복잡하여 이해할 수 없지만, pymeeus라는 파이선 라이브러리를 이용하여 춘분과 동지를 구할 수 있다.

해다마 대략 여섯 시간씩 늦춰지는데, 윤년이 있어서 그 변동 폭이 하루 이내로 제한된다고 한다.

import argparse
from datetime import date
from pymeeus.Sun import Sun
import math
import arrow

def celestial_longitude(year, season, title):

    epoch = Sun.get_equinox_solstice(year, target=season)
    epochUTC = epoch.get_full_date(utc=True)
    frac, integer = math.modf(epochUTC[5])
    # timepoint = arrow.get(*epochutc[:5])
    GMT = arrow.get(*epochUTC[:5], int(integer), round(frac*1e6))
    Korea = GMT.shift(hours=9)
    GMT = GMT.format('YYYY-MM-DD HH:mm:ss')
    Korea = Korea.format('YYYY-MM-DD HH:mm:ss')
    print('\t{}\tGMT: {}  Korea: {}'.format(title, GMT, Korea))

season={
    'spring': 'Spring equinox',
    'summer': 'Summer solstice',
    'autumn': 'Autumn equinox',
    'winter': 'Winter solstice'
}

parser = argparse.ArgumentParser(
    description = 'Get equinox and solstice dates.'
)
parser.add_argument(
    'years',
    nargs='*',
    help='Enter a year.'
)
args = parser.parse_args()

if len(args.years) == 0:
    args.years.append(date.today().year)

for year in args.years:
    print(year, end='')
    for i in season.items():
        celestial_longitude(int(year), i[0], i[1])