The foundation of the Chinese Traditional Calendar is its ability to accurately calculate lunar dates, identify traditional festivals, and provide culturally relevant wisdom and guidance:
import datetime
import google.generativeai as genai
from typing import Dict, List, Optional, Tuple
import math
class ChineseLunarCalendar:
"""
Advanced lunar calendar system that combines astronomical calculations
with traditional Chinese cultural knowledge for authentic calendar experiences.
"""
def __init__(self, api_key: str):
genai.configure(api_key=api_key)
self.cultural_ai = genai.GenerativeModel('gemini-pro')
self.zodiac_animals = [
{'name': '鼠', 'english': 'Rat', 'traits': ['intelligent', 'adaptable', 'resourceful']},
{'name': '牛', 'english': 'Ox', 'traits': ['reliable', 'patient', 'methodical']},
{'name': '虎', 'english': 'Tiger', 'traits': ['brave', 'confident', 'charismatic']},
{'name': '兔', 'english': 'Rabbit', 'traits': ['gentle', 'elegant', 'diplomatic']}
]
self.traditional_festivals = {
'spring_festival': {'name': '春节', 'significance': 'New Year celebration'},
'qingming': {'name': '清明节', 'significance': 'Tomb sweeping day'},
'mid_autumn': {'name': '中秋节', 'significance': 'Moon festival'},
'dragon_boat': {'name': '端午节', 'significance': 'Dragon boat festival'}
}
self.five_elements = {
'wood': {'chinese': '木', 'color': 'green', 'season': 'spring'},
'fire': {'chinese': '火', 'color': 'red', 'season': 'summer'},
'earth': {'chinese': '土', 'color': 'yellow', 'season': 'late_summer'},
'metal': {'chinese': '金', 'color': 'white', 'season': 'autumn'},
'water': {'chinese': '水', 'color': 'black', 'season': 'winter'}
}
def calculate_lunar_date(self, gregorian_date: datetime.date) -> Dict:
"""
Convert Gregorian date to Chinese lunar calendar with cultural context.
Includes zodiac year, month, day and traditional significance.
Args:
gregorian_date: Standard Gregorian calendar date
Returns:
Dictionary containing lunar date information and cultural significance
"""
lunar_year = self._calculate_lunar_year(gregorian_date)
zodiac_index = (lunar_year - 4) % 12
zodiac_animal = self.zodiac_animals[zodiac_index]
lunar_month, lunar_day = self._calculate_lunar_month_day(gregorian_date)
year_element = self._calculate_year_element(lunar_year)
festivals = self._check_traditional_festivals(lunar_month, lunar_day)
cultural_guidance = await self._generate_cultural_guidance(
zodiac_animal, year_element, lunar_month, lunar_day, festivals
)
return {
'gregorian_date': gregorian_date.strftime('%Y-%m-%d'),
'lunar_year': lunar_year,
'lunar_month': lunar_month,
'lunar_day': lunar_day,
'zodiac_animal': zodiac_animal,
'year_element': year_element,
'festivals': festivals,
'cultural_guidance': cultural_guidance,
'traditional_display': f"{zodiac_animal['name']}年 {lunar_month}月 {lunar_day}日"
}
def _calculate_lunar_year(self, date: datetime.date) -> int:
"""
Calculate Chinese lunar year using traditional astronomical methods.
Accounts for lunar new year timing differences from Gregorian calendar.
"""
base_year = 1900
lunar_new_year_approx = datetime.date(date.year, 2, 1)
if date < lunar_new_year_approx:
lunar_year = date.year - 1
else:
lunar_year = date.year
return lunar_year
def _calculate_year_element(self, lunar_year: int) -> Dict:
"""
Calculate the five element (Wu Xing) for the given lunar year.
Follows traditional 10-year element cycle combined with zodiac.
"""
element_cycle = ['wood', 'fire', 'earth', 'metal', 'water']
element_index = ((lunar_year - 4) // 2) % 5
element_name = element_cycle[element_index]
return self.five_elements[element_name]
async _generate_cultural_guidance(
self, zodiac: Dict, element: Dict, month: int, day: int, festivals: List[Dict]
) -> Dict:
"""
Generate culturally authentic guidance based on traditional Chinese wisdom.
Combines zodiac traits, five element theory, and seasonal advice.
"""
guidance_prompt = f"""
Provide traditional Chinese cultural guidance for today based on:
Zodiac Animal: {zodiac['english']} ({zodiac['name']})
Animal Traits: {', '.join(zodiac['traits'])}
Year Element: {element['chinese']} ({list(element.keys())[0].title()})
Element Season: {element['season']}
Lunar Month: {month}
Lunar Day: {day}
Festivals Today: {[f['name'] for f in festivals] if festivals else 'None'}
Provide guidance in these areas:
1. 今日吉凶 (Today's Fortune): Auspicious and inauspicious activities
2. 健康建议 (Health Advice): Wellness tips based on seasonal energy
3. 人际关系 (Relationships): Social harmony and communication guidance
4. 事业财运 (Career & Wealth): Professional and financial insights
5. 传统智慧 (Traditional Wisdom): Relevant proverbs or ancient sayings
Keep advice authentic to traditional Chinese culture and philosophy.
Include both Chinese and English for cultural education.
"""
response = await self.cultural_ai.generate_content_async(guidance_prompt)
return {
'daily_guidance': response.text,
'zodiac_compatibility': await self._calculate_zodiac_compatibility(zodiac),
'seasonal_advice': await self._generate_seasonal_advice(element, month),
'festival_significance': self._explain_festival_significance(festivals)
}