from skyfield import eclipselib
from skyfield.api import load, wgs84
from numpy import pi
from zoneinfo import ZoneInfo
bjt = ZoneInfo("Asia/Shanghai")
ts = load.timescale()
eph = load("de422.bsp")
moon = eph["moon"]
earth = eph["earth"]
r2d = 180./pi
beijing = earth + wgs84.latlon(39.9042, 116.4074, 44)
lunar = ['半影月食','月偏食','月全食']
t0 = ts.utc(2026, 1, 1)
t1 = ts.utc(2027, 1, 1)
t, y, details = eclipselib.lunar_eclipses(t0, t1, eph)
idx = 0
for ti, yi in zip(t, y):
print(
ti.astimezone(bjt).strftime("%Y-%m-%d %H:%M:%S"),
f"{lunar[yi]}"
)
print(f"\t日月最近夹角:\t{details['closest_approach_radians'][idx]*r2d:.2f}°")
print(f"\t月球半径:\t{details['moon_radius_radians'][idx]*r2d:.2f}°")
print(f"\t半影半径:\t{details['penumbra_radius_radians'][idx]*r2d:.2f}°")
print(f"\t本影半径:\t{details['umbra_radius_radians'][idx]*r2d:.2f}°")
print(f"\t本影食分:\t{details['umbral_magnitude'][idx]:.2f}")
print(f"\t半影食分:\t{details['penumbral_magnitude'][idx]:.2f}")
idx+=1
apparent = beijing.at(ti).observe(moon).apparent()
alt, az, _ = apparent.altaz()
print(f"\t月球位置:方位角 {az},高度角 {alt}")
print()
Output:
2026-03-03 19:33:41 月全食
日月最近夹角: 0.36°
月球半径: 0.26°
半影半径: 1.24°
本影半径: 0.70°
本影食分: 1.15
半影食分: 2.18
月球位置:方位角 96deg 04' 33.3",高度角 16deg 13' 50.3"
2026-08-28 12:12:53 月偏食
日月最近夹角: 0.47°
月球半径: 0.25°
半影半径: 1.21°
本影半径: 0.68°
本影食分: 0.93
半影食分: 1.96
月球位置:方位角 359deg 03' 14.0",高度角
PMO:


留言
張貼留言