Python阴阳历日期转换

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

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

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

from zhdate import ZhDate
from datetime import datetimeprint(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 datetimeprint('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 timeprint('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 : 平年

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/84635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Eclipse工具使用技巧

1、常用快捷键 ctrlshifto 快速导包 CtrlSpace 内容助理 说明:内容助理。提供对方法,变量,参数,javadoc等得提示,应运在多种场合,总之需要提示的时候可先按此快捷键。注:避免输入法的切换设置与此设置冲突 CtrlShiftSpace 变量提示 Ctrl/ 添加/消除//注释 CtrlShift/ 添加…

华为HCIA(三)

链路本地地址接口标识64bit 当STP端口到了Forwarding状态后,会转发流量,也处理报文 在TCP/IP模型中,会话层,表示层和应用层,都规划成了应用层 路由表包含目的地址和掩码,优先级,cost,下一跳和…

JWT令牌

一、JWT(Json Web Token)能干什么 1、安全认证(权限认证) 比如登录系统的时候,服务器会检查前端请求数据中携带的token信息,符合标准则允许访问,不符合则拒绝你的访问请求。 2、信息传递 比…

laravel框架 - 事件与监听器

一,绑定事件与监听器 在app\Providers下的EventServiceProvider.php中添加我们定义的事件与监听器 protected $listen [Registered::class > [SendEmailVerificationNotification::class,],App\ebvent\RegisterMessage>[//事件App\listeners\SendMessage//监…

高云FPGA系列教程(10):letter-shell移植

文章目录 letter-shell简介letter-shell源码获取letter-shell移植函数和变量应用示例 本文是高云FPGA系列教程的第10篇文章。 shell,中文是外壳的意思,就是操作系统的外壳。通过shell命令可以操作和控制操作系统,比如Linux中的Shell命令就包括…

QT--day5

注册 mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include<QPushButton> #include<QLineEdit> #include<QLabel> #include <QMessageBox> #include<QString> #include<QSqlDatabase> …

CAN总线物理层

本文的目的并不是为了介绍或普及CAN总线相关知识,而是为了了解CAN总线,进而为CAN通信一致性测试做知识储备。 CAN,控制器局域网,全称:Controller Area Network。1986年,由德国Bosch公司为汽车开发的网络技术,主要用于汽车的监测与控制,目的为适应汽车“减少线束的数量…

1787_函数指针的使用

全部学习汇总&#xff1a;GitHub - GreyZhang/c_basic: little bits of c. 前阵子似乎写了不少错代码&#xff0c;因为对函数指针的理解还不够。今天晚上似乎总算是梳理出了一点眉目&#xff0c;在先前自己写过的代码工程中做一下测试。 先前实现过一个归并排序算法&#xff0c…

1999-2018年地级市不同所有制成分工业总产值数据

1999-2018年地级市不同所有制成分工业总产值数据 1、时间&#xff1a;1999-2018年 2、范围&#xff1a;地级市 3、指标&#xff1a;行政区划代码、城市、年份、规模以上工业企业数_全市_个、规模以上工业企业数_市辖区_个、规模以上内资企业数_全市_个、规模以上内资企业数_…

【AI视野·今日CV 计算机视觉论文速览 第250期】Wed, 20 Sep 2023

AI视野今日CS.CV 计算机视觉论文速览 Wed, 20 Sep 2023 Totally 95 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computer Vision Papers PanopticNeRF-360: Panoramic 3D-to-2D Label Transfer in Urban Scenes Authors Xiao Fu, Shangzhan Zhang, Tianrun Chen…

满足开闭原则的JDBCUtils~

我们都知道开闭原则即为对修改关闭&#xff0c;对拓展开放&#xff0c;那么对于实现既能通过DriverManager连接数据库&#xff0c;也能实现使用c3P0连接数据库&#xff0c;连接数据库的方式即为可变点&#xff0c;我们只需要使用抽象类或者接口封装可变点&#xff0c;再将可变点…

ip地址的正则表达式

ip地址的正则表达式 checkIpSpecial: {// 验证IP地址validator: function (value) {// var reg /^((1?\d?\d|(2([0-4]\d|5[0-5])))\.){3}(1?\d?\d|(2([0-4]\d|5[0-5])))$/;这个正则表达式的意思是&#xff1a;以数字开头&#xff0c;紧接着是一个点&#xff0c;然后再是数…

SecureCRT SSH与FTP连接中文乱码

1、首先要保证服务端环境变量是UTF-8编码的 LANG”zh_CN.UTF-8″ 2、会话里面配置好字符编码&#xff1a;UTF-8 SSH会话的窗口就可以正常显示中文了&#xff0c;效果如下 3、打开FTP或者SFTP时进行文件传输时&#xff0c;列表窗口里面还是乱码&#xff0c;需要把SecureCRT安…

猜数游戏 rust解法

给定答案序列和猜测序列&#xff0c;统计有几个数字位置正确&#xff0c;有几个数字在两个序列都出现过但位置不对。 输入包含多组数据。每组第一行是序列长度n&#xff0c;第二行是答案序列&#xff0c;接下来若干行是猜测序列。猜测序列全0时该组结束。n0时整个输入结束。 样…

【知识分享】Java获取当前日期是第几周且本周是几号到几号

加哥今天给大家提供一个获取当前日期是本年度的第几周的方法&#xff0c;且这周是几号到几号的工具类&#xff0c;供大家使用。 public static void main(String[] args) {//使用当前时间戳 System.currentTimeMillis()Current_week(System.currentTimeMillis()); }public st…

周界警戒AI算法+视频智能分析在安全生产场景中的应用

长期以来&#xff0c;周界防范安防系统在大型园区、工厂、社区、机场、火车站站台、重点单位等领域应用较为广泛和常见。随着AI人工智能等新兴技术的快速发展与落地应用&#xff0c;通过AI智能检测与视频智能分析技术&#xff0c;现代化的周界安防系统可以做到全天候快速、准确…

科普:什么是视频监控平台?如何应用在场景中?

随着科技的发展&#xff0c;监控无处不在&#xff0c;就像一张密不透风的网&#xff0c;将生活中的角角落落都编织在一起。可是&#xff0c;你真的知道什么是安防视频监控平台吗&#xff1f;它可不止是一个简单的通电摄像头&#xff0c;如今的视频监控平台&#xff0c;涵盖了无…

Python爬虫基础(三):使用Selenium动态加载网页

文章目录 系列文章索引一、Selenium简介1、什么是selenium&#xff1f;2、为什么使用selenium3、安装selenium&#xff08;1&#xff09;谷歌浏览器驱动下载安装&#xff08;2&#xff09;安装selenium 二、Selenium使用1、简单使用2、元素定位3、获取元素信息4、交互 三、Phan…

Tomcat的启动问题

今天去打开Tomcat的时候没反应 如下 按之前是到Tomcat目录下的bin目录下的startup.bat文件&#xff0c;双击&#xff0c;就可以启动Tomcat服务器。启动后可以 打开浏览器&#xff0c;在浏览器地址栏中输入以下地址测试&#xff1a; 1、http://localhost:8080 2、http://127.…

c: Sorting Algorithms

SortAlgorithm.h /*****************************************************************//*** \file SortAlgorithm.h* \brief 业务操作方法* VSCODE c11 https://github.com/hustcc/JS-Sorting-Algorithm/blob/master/2.selectionSort.md* https://www.programiz.com/d…