Python阴阳历日期转换

2023-09-18 22:31:13

    阳历转阴(殷)历,阴历转阳历,了解一下阴阳历的转换逻辑、闰月的转换。
    农历,古时称为夏历,是中国现行的传统历法, 属于阴历和阳历的合历,根据月相的变化周期一个月,参考太阳回归年为一年的长度,加入二十四节气与设置闫月平均历年与回归年相适应。-- 百度百科

1. 阴阳历偏差计算表
    参考以下所使用python库中定义的1900~2100年的月天数、闰月计算偏差表。2100年以后呢?

2. zhdate 库
    使用数字标识自1900年至2100年的月天数、是否闰月、闰月天数列表,计算偏差得出阴历日。

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 库

  • 当前日期阳历和阴历显示
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
  • 指定日期(2023-01-01)转阳历和阴历
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. lunar 库 -- CSDN创作助手:python 阳历转阴历

说明:中文版的lunar库,应该是python版本不对,大量需要修正

  • 安装
pip install lunar-python
  • 编码及运行程序 
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'
  • 错误修改
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 库 -- CSDN创作助手:python 3 阳历转阴历
    yearInfos作为偏差(offset)生成自1900年到2100年的月天数、是否闰年、闰年月份及天数,计算得出阳历日期对应的阴历日期。

  • 安装
pip install lunardate
  • 编码及运行程序 
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. 闰

  • 闰月,Leap Month,针对阴历、农历。
    - 阴阳历逢闰年所加的1个月,十九年七闰的方法:在农历十九年中,有十二个平年,一平年十二个月;有七个闰年,一闰年十三个月。
    - 农历每二至三年增加的一个月,即每2~3年置1闰
    - 闰月,大月为30日,小月为29日
    - 闰月表参考 闰月(阴阳合历中的历法概念)_百度百科
  • 闰年,Leap Year,针对阳历
    - 闰年366天,平年365天
    - 闰日2月为29天,平日2月为28天
    - 普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)
    - 普通闰年:公历年份是4的倍数,且不是100的倍数的,为闰年(如2004年、2020年等就是闰年)
    - 参考 闰年_百度百科
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 : 平年

 

更多推荐

【离网逆变器】离网逆变器型号由一个高频DC-DC升压转换器与全桥PI控制电压源逆变器级联组成、逆变器使用带LC滤波器的SPWM调制(Simulink)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Simulink实现💥1概述本文离网逆变器型号具备令人印象深刻的功能和性能。它

基于SSM的出租车管理系统的设计与实现

末尾获取源码开发语言:JavaJava开发工具:JDK1.8后端框架:SSM前端:采用JSP技术开发数据库:MySQL5.7和Navicat管理工具结合服务器:Tomcat8.5开发软件:IDEA/Eclipse是否Maven项目:是目录一、项目简介二、系统功能三、系统项目截图管理员功能实现员工功能实现​编辑驾驶员功能

如何摆脱产品同质化现象?请你做好反向行动

01:被违反的经济学原理经济学的基本原理之一是价格与需求之间存在反比关系。然而,大家见过两款功能几乎相同的垃圾袋却出现了价格与需求不成反比的情况。一款垃圾袋售价39元却能卖到20万的销量额而另一款垃圾袋售价几块却只有几千的销量你知道为什么吗?02:卖点过多会导致用户困惑有一句话说:“过犹不及”,这也适用于产品的卖点。如

基于矩阵分解算法的智能Steam游戏AI推荐系统——深度学习算法应用(含python、ipynb工程源码)+数据集(四)

目录前言总体设计系统整体结构图系统流程图运行环境模块实现1.数据预处理2.模型构建1)定义模型结构2)优化损失函数3.模型训练及保存1)模型训练2)模型保存4.模型应用1)制作页面2)模型导入及调用3)模型应用代码系统测试1.训练准确率2.测试效果3.模型应用1)程序使用说明2)测试结果相关其它博客工程源代码下载其它资

动态规划 Ⅱ

62.不同路径一个机器人位于一个mxn网格的左上角(起始点在下图中标记为“Start”)。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。问总共有多少条不同的路径?思路:dp[i][j]=dp[i-1]dp[j]+dp[i]+dp[j-1],dp[i][j]=0when

数据结构与算法(C语言版)P1---算法效率

算法的效率:算法的时间复杂度和空间复杂度【本节目标】1.算法效率2.时间复杂度3.空间复杂度4.常见时间复杂度以及复杂oj练习1、算法效率1.1、如何衡量一个算法是的好坏如何衡量一个算法的好坏呢?比如斐波那契数列:longlongFib(intN){if(N<3)return1;returnFib(N-1)+Fib(N

MFC网络编程2——异步套接字

从上一节(MFC网络编程1——网络基础及套接字)中,我们了解了网络的部分基础知识以及套接字的使用,这一节,我们学习异步套接字的使用。Windows套接字在两种模式下执行I/O操作,阻塞模式和非阻塞模式。在阻塞模式下,在I/O操作完成前,执行操作的Winsock函数会一直等待下去,不会立即返回,例如,程序中调用了recv

分布式事务

1.分布式事务问题1.1.本地事务本地事务,也就是传统的单机事务。在传统数据库事务中,必须要满足四个原则:1.2.分布式事务分布式事务,就是指不是在单个服务或单个数据库架构下,产生的事务,例如:跨数据源的分布式事务跨服务的分布式事务综合情况在数据库水平拆分、服务垂直拆分之后,一个业务操作通常要跨多个数据库、服务才能完成

上海亚商投顾:沪指失守3100点补缺口 华为概念股逆市活跃

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。一.市场情绪三大指数昨日继续调整,沪指失守3100点,深成指跌破万点大关,创业板指续创3年多以来新低。华为概念股逆市活跃,捷荣技术再度涨停,18个交易日累计涨超250%,光弘科技、荣联科技、天邑股份、常山北明等多股封板。

UOS QTextEdit设置换行和滚动条(bug自动换行时右侧个别字符被遮盖)

一、环境UOS_x86/QT5/C++二、qtextEdit换行设置下图在ui界面lineWrapMode这个参数可以设置换行相关:NoWrap是不换行、WidgetWidth是自动换行(按textEdit的宽度换行)、下面两个是可以自定义每行的宽度,如果选了这两个,就可通过下面LineWrapColumnOrWidt

运维面试宝典

【Linux基础篇】1.描述Linux运行级别0-6的各自含义0:关机模式1:单用户模式<==破解root密码2:无网络支持的多用户模式3:有网络支持的多用户模式(文本模式,工作中最常用的模式)4:保留,未使用5:有网络支持的X‐windows支持多用户模式(桌面)6:重新引导系统,即重启2.描述Linux系统从开机到

热文推荐