yuangu/sxtwl_cpp

sxtwl 2.0.4 使用ymc, rmc 有問題 - Python3.10.0

samtptw opened this issue · 4 comments

import sxtwl #sxtwl 使用版本 2.0.4
import datetime

Gan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
Zhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
ShX = ["鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "猪"]
numCn = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]
jqmc = ["冬至", "小寒", "大寒", "立春", "雨水", "驚蟄", "春分", "清明", "穀雨", "立夏", "小滿", "芒種", "夏至", "小暑", "大暑", "立秋", "處暑","白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"]
ymc = ["十一", "十二", "正", "二", "三", "四", "五", "六", "七", "八", "九", "十" ]
rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
XiZ = ['摩羯', '水瓶', '双魚', '白羊', '金牛', '双子', '巨蟹', '狮子', '處女', '天秤', '天蝎', '射手']
WeekCn = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

dt=datetime.datetime.now()
day=sxtwl.fromSolar(dt.year,dt.month,dt.day)
print("目前日期:", datetime.date.today())

if day.isLunarLeap():
print("農曆 閏",day.getLunarMonth(),"月", day.getLunarDay(),"日")
else:
print("農曆",day.getLunarMonth(),"月", day.getLunarDay(),"日")

if day.isLunarLeap():
print("農曆 閏",ymc[day.getLunarMonth()],"月", rmc[day.getLunarDay()],"日")
else:
print("農曆",ymc[day.getLunarMonth()],"月", rmc[day.getLunarDay()],"日")


目前日期: 2021-12-01
農曆 10 月 27 日
農曆 九 月 廿八 日

使用ymc, rmc 得到的中文日期為不正確

ymc和rmc确实写错了。晚点我会修改例子。谢谢 !!话说你有微信么? 加群一起讨论啊,群二维码已经发至您的邮箱了。

今天改寫了一下, 有點笨的寫法, 暫時解決, 請參考:

import sxtwl #sxtwl 使用版本 2.0.4
import datetime

Gan = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"]
Zhi = ["子", "丑", "寅", "卯", "辰", "巳", "午", "未", "申", "酉", "戌", "亥"]
ShX = ["鼠", "牛", "虎", "兔", "龍", "蛇", "馬", "羊", "猴", "雞", "狗", "猪"]
numCn = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九", "十"]
jqmc = ["冬至", "小寒", "大寒", "立春", "雨水", "驚蟄", "春分", "清明", "穀雨", "立夏", "小滿", "芒種", "夏至", "小暑", "大暑", "立秋", "處暑","白露", "秋分", "寒露", "霜降", "立冬", "小雪", "大雪"]
ymc = ["正", "二", "三", "四", "五", "六", "七", "八", "九", "十","十一", "十二"]
rmc = ["初一", "初二", "初三", "初四", "初五", "初六", "初七", "初八", "初九", "初十", "十一", "十二", "十三", "十四", "十五", "十六", "十七", "十八", "十九", "二十", "廿一", "廿二", "廿三", "廿四", "廿五", "廿六", "廿七", "廿八", "廿九", "三十", "卅一"]
XiZ = ['摩羯', '水瓶', '双魚', '白羊', '金牛', '双子', '巨蟹', '狮子', '處女', '天秤', '天蝎', '射手']
WeekCn = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]

def find_Chinese(time,value,unit=""): #ymc/rmc,尋找值(月/日),單位(月/日)
for i,j in enumerate(time,start=1):
if value==i:
return j+unit

dt=datetime.datetime.now()
#day=sxtwl.fromSolar(dt.year,dt.month,dt.day)
day=sxtwl.fromSolar(2020,5,26) #2020/5/26 農曆閏月
#print("目前日期:", datetime.date.today())
print("陽曆:",day.getSolarYear(), day.getSolarMonth(),day.getSolarDay())

if day.isLunarLeap():
print("農曆 閏",find_Chinese(ymc,day.getLunarMonth(),"月"), find_Chinese(rmc,day.getLunarDay(),"日"))
else:
print("農曆",find_Chinese(ymc,day.getLunarMonth(),"月"), find_Chinese(rmc,day.getLunarDay(),"日"))

========================================================================
陽曆: 2020 5 26
農曆 閏 四月 初四日

不用这麻烦
直接月和日减一来做索引。

s = "农历:%d年%s%d月%d日" % (day.getLunarYear(False), '闰' if day.isLunarLeap() else '', ymc[day.getLunarMonth() - 1], rmc[day.getLunarDay() - 1])
print(s)

之前試過, 1月時有試到out of range 情形, 直接用ymc[day.getLunarMonth()]. 但是改為ymc[day.getLunarMonth() - 1], rmc[day.getLunarDay() - 1] 就沒有out of range這問題.

另外, 注意一下, 上面的ymc 已改為正月為首, 舊版是11月為首.