Python竟然还可以计算农历!

发表于:2022-4-28 10:05

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:朱小五    来源:菜鸟学Python

  最近处理工作任务的时候遇到了转换农历的问题。
  农历,是我国现行的传统历法。它是根据月相的变化周期,每一次月相朔望变化为一个月,参考太阳回归年为一年的长度,并加入二十四节气与设置闰月以使平均历年与回归年相适应。
  对于我们处理数据来说,并不需要去详细研究农历与公历之间的转换关系。在Python中,ZhDate库支持农历-公历互相转换、日期加减以及全中文日期生成,内置了1900-2100年的农历数据,仅依赖Python内置模块。github.com/CutePandaSh/zhdate
  由于ZhDate属于Python的第三大开源模块,因此需要额外安装、导入后,才能使用。直接在命令窗口中输入如下命令:
  pip install zhdate
  
  详细使用方法
  zhdate库,不用网络接口直接本地计算中国农历,支持农历阳历互转。
  阳历与农历日期的相互转换
  在交互式环境中输入如下命令:
  from zhdate import ZhDate
  date1 = ZhDate(2022, 2, 2)  # 新建农历 2022年二月初二(龙抬头)的日期对象
  print(date1)  # 直接返回农历日期字符串d

  输出:
  农历2022年2月2日
  
  在交互式环境中输入如下命令:
  t_date1 = date1.to_datetime()
  t_date1

  输出:
  datetime.datetime(2022, 3, 4, 0, 0)
  
  在交互式环境中输入如下命令:
  from datetime import datetime
  dt_date2 = datetime(2022, 2, 6)
  date2 = ZhDate.from_datetime(dt_date2)  # 从阳历日期转换成农历日期对象
  date2

  输出:
  农历2022年1月6日
  
  闰月
  在交互式环境中输入如下命令:
  date3 = ZhDate(2020, 4, 15)  # 新建农历 2020年4月15日
  print(date3.to_datetime())

  输出:
  2020-05-07 00:00:00

  在交互式环境中输入如下命令:
  date3 = ZhDate(2020, 4, 15)  # 新建农历 2020年闰4月15日
  print(date3.to_datetime())

  输出:
  2020-06-06 00:00:00
  
  这一年农历4月15日的同学,可以分别在5月7日和6月6日分别过两次农历生日。
  其他
  中文输出,在交互式环境中输入如下命令:
  dt_date4 = datetime(2022, 3, 4)
  date4 = ZhDate.from_datetime(dt_date4)
  print(date4.chinese())

  输出:
  二零二二年二月初二 壬寅年 (虎年)
  
  当天的农历日期,在交互式环境中输入如下命令:
  ZhDate.today()
  
  输出:
  农历2022年2月7日
  
  此外,zhdate模块也支持加减法。两个zhdate对象相减可以得到两个农历日期的差额,同时加整数也可以返回相隔天数以后的新农历对象。
  实战:计算节日距离天数
  下面通过一个实战项目练习一下这个zhdate模块。
  加入我们想快速地了解今天距离某个节日还有多少天?可以使用zhdate和datetime库搭配解决这个问题。
  在交互式环境中输入如下命令:
  today = datetime.now()
  data_str = today.strftime('%Y-%m-%d')
  data_str

  输出:
  '2022-03-09'
  
  计算距离劳动节的天数,在交互式环境中输入如下命令:
  oneDay = datetime(2022, 5, 1)
  difference = oneDay.toordinal()-today.toordinal()
  print(f'今天 {data_str} 距离五一劳动节还有 {difference} 天')

  输出:
  今天 2022-03-09 距离五一劳动节还有 53 天
  
  计算距离中秋节的天数,在交互式环境中输入如下命令:
  oneDay = ZhDate(2022, 8, 15).to_datetime()
  difference = oneDay.toordinal()-today.toordinal()
  print(f'今天 {data_str} 距离中秋节还有 {difference} 天')

  输出:
  今天 2022-03-09 距离中秋节还有 185 天
  
  大家有时间也可以动手试一试,测试一下还距离其他节日多少天?实战时要注意该节日是按照公历统计还是农历设置的。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号