Konvertierung lunisolarer Datumsangaben in Python

    Konvertieren Sie den Sonnenkalender in den Mondkalender (Yin) und konvertieren Sie den Mondkalender in den Sonnenkalender. Verstehen Sie die Konvertierungslogik des Mond- und Sonnenkalenders und die Konvertierung von Schaltmonaten.
    Der Mondkalender, in der Antike als Xia-Kalender bekannt, ist Chinas aktueller traditioneller Kalender. Er ist ein kombinierter Kalender aus Mondkalender und Sonnenkalender. Er hat einen einmonatigen Zyklus, der auf den wechselnden Mondphasen basiert. Es bezieht sich auf das solare Rückkehrjahr als die Länge eines Jahres, addiert die vierundzwanzig solaren Terme und setzt Yan. Das monatliche durchschnittliche Kalenderjahr entspricht dem tropischen Jahr. – Baidu-Enzyklopädie

1. Die Berechnungstabelle für die Abweichung des Lunisolarkalenders
    finden Sie in der Abweichungstabelle zur Berechnung der Anzahl der Monate, Tage und Schaltmonate von 1900 bis 2100, die in der unten verwendeten Python-Bibliothek definiert sind. Was ist nach 2100?

2. Die zhdate-Bibliothek
    verwendet Zahlen, um die Anzahl der Tage im Monat von 1900 bis 2100 zu identifizieren, ob es einen Schaltmonat gibt, und die Liste der Tage im Schaltmonat und berechnet die Abweichung, um den Mondkalendertag zu erhalten.

from zhdate import ZhDate
from datetime import datetime

print(ZhDate.from_datetime(datetime(2023, 9, 17)))
print(ZhDate(2023, 9, 17).to_datetime())

>>>
======================================================
Lunar is:  农历2023年8月3日
Solar is:  2023-10-31 00:00:00

3. Lunardate-Bibliothek

  • Anzeige des aktuellen Datums im Sonnen- und Mondkalender
import lunardate as ld
import time
from datetime import datetime

print('Today Solar is: ', time.strftime('%Y-%m-%d')) 
print('Today Lunar is: ', ld.LunarDate.today())


y = ld.LunarDate.today().year
m = ld.LunarDate.today().month
d = ld.LunarDate.today().day
sd = str(y) + '-' + str(m) + '-' + str(d)

print('Today Lunar is: ', datetime.strptime(sd, '%Y-%m-%d').date())

>>>
===========================================
Today Solar is:  2023-09-17
Today Lunar is:  LunarDate(2023, 8, 3, 0)
Today Lunar is:  2023-08-03
  • Konvertieren Sie das angegebene Datum (01.01.2023) in Sonnen- und Mondkalender
import lunardate as ld
import time

print('Today is: ', time.strftime('%Y-%m-%d'))
td = [time.gmtime().tm_year, time.gmtime().tm_mon, time.gmtime().tm_mday]
print('Today Lunar is: ', ld.LunarDate.fromSolarDate(td[0],td[1],td[2]))
print('Today Solar is: ', ld.LunarDate(td[0],td[1],td[2]).toSolarDate())

>>>
=============================================
Today is:  2023-09-17
Today Lunar is:  LunarDate(2023, 8, 3, 0)
Today Solar is:  2023-10-31

4. Mondbibliothek – CSDN-Erstellungsassistent: Python-Sonnenkalender zum Mondkalender

Hinweis: Die chinesische Version der Mondbibliothek sollte eine falsche Python-Version haben und erfordert viele Korrekturen.

  • Installieren
pip install lunar-python
  • Programme programmieren und ausführen 
from lunar import Lunar

# 创建阳历日期对象
date = Lunar.from_date(2022, 1, 1)

# 转换为阴历日期对象
lunar_date = date.to_lunar_date()

# 获取阴历日期信息
print(lunar_date.year, lunar_date.month, lunar_date.day, lunar_date.is_leap)

>>>
=================================================
    date = Lunar.from_date(2022, 1, 1)
AttributeError: type object 'Lunar' has no attribute 'from_date'
  • Bug-Fix
from lunar import Lunar
from datetime import datetime

# 创建阳历日期对象
date = Lunar.from_date(2022, 1, 1)
date = datetime.now()

# 转换为阴历日期对象
lunar_date = date.to_lunar_date()
lunardate = Lunar.fromDate(date)
print(lunardate)

# 获取阴历日期信息
#print(lunar_date.year, lunar_date.month, lunar_date.day, lunar_date.is_leap)

>>>
===========================================
二〇二三年八月初三

5. Lunardate-Bibliothek – CSDN-Erstellungsassistent: Python 3 Konvertieren Sie den Sonnenkalender
    in den Mondkalender. Jahresinformationen als Abweichung (Offset), um die Anzahl der Monate und Tage von 1900 bis 2100 zu generieren, ob es sich um ein Schaltjahr handelt, den Monat und die Anzahl der Tage in ein Schaltjahr und berechnen Sie das Mondkalenderdatum, das dem Sonnenkalenderdatum entspricht.

  • Installieren
pip install lunardate
  • Programme programmieren und ausführen 
import lunardate

# 定义阳历日期
year = 2023
month = 9
day = 17

# 将阳历日期转换为阴历日期
lunar_date = lunardate.LunarDate.fromSolarDate(year, month, day)

# 输出阴历日期
print("阴历日期为:", lunar_date.day, lunar_date.month, lunar_date.year)

# 输出阳历日期
solar_date = lunardate.LunarDate(year,month,day).toSolarDate()
print("阳历日期为:", solar_date.day, solar_date.month, solar_date.year)

>>>
==========================================
阴历日期为: 3 8 2023
阳历日期为: 31 10 2023

6. Sprung

  • Schaltmonat, Schaltmonat, für den Mondkalender und den Mondkalender.
    - In Schaltjahren wird dem Lunisolarkalender ein Monat hinzugefügt, in neunzehn Jahren die Methode von sieben Schaltjahren: In den neunzehn Jahren des Mondkalenders gibt es zwölf gewöhnliche Jahre, ein gewöhnliches Jahr hat zwölf Monate; es gibt sieben Schaltjahre Jahre, und ein Schaltjahr hat dreizehn Monate.
    - Alle zwei bis drei Jahre wird ein Monat zum Mondkalender hinzugefügt, d. h. alle 2 bis 3 Jahre wird ein Schaltmonat festgelegt
    - ein Schaltmonat, der große Monat ist der 30. und der kleine Monat der 29.
    - Die Schaltmonatstabelle bezieht sich auf  den Schaltmonat (das Kalenderkonzept im Lunisolarkalender)_ Baidu-Enzyklopädie
  • Schaltjahr, Schaltjahr, für den gregorianischen Kalender
    – Schaltjahr hat 366 Tage, gewöhnliches Jahr hat 365 Tage
    – Schalttag Februar hat 29 Tage, gewöhnlicher Februar hat 28 Tage
    – gewöhnliches Schaltjahr: Wenn das gregorianische Kalenderjahr ein Vielfaches von 4 ist und kein Vielfaches von 100 ist, handelt es sich um ein Schaltjahr (z. B. 2004, 2020 usw. sind Schaltjahre)
    – Gewöhnliches Schaltjahr: Wenn das gregorianische Kalenderjahr ein Vielfaches von 4 und kein Vielfaches von 100 ist, Es ist ein Schaltjahr (z. B. 2004, 2020 usw. sind Schaltjahre) –
    Referenz  Schaltjahr_Baidu-Enzyklopädie
yinput = input("输入年份:")
YEAR = int(yinput)
if (YEAR % 4 == 0 and YEAR % 100 != 0) or (YEAR % 400 == 0 and YEAR % 3200 != 0) or YEAR % 172800 == 0:    
# 似乎一直在用的是 (YEAR % 4 == 0 and YEAR % 100 != 0) or (YEAR % 400 == 0)
    print (YEAR, ": 闰年")
else:
    print (YEAR, ": 平年")

========================================
>>>
输入年份:2020
2020 : 闰年

>>>
输入年份:1000
1000 : 平年

>>>
输入年份:2000
2000 : 闰年

>>>
输入年份:2023
2023 : 平年

 

Ich denke du magst

Origin blog.csdn.net/u012841352/article/details/132953898
Empfohlen
Rangfolge