python实现的阳历转阴历(农历)算法

下面是详细讲解“Python实现的阳历转阴历(农历)算法”的完整攻略,包含两个示例说明

阳历阴历

阳历是指以地球公转为基础的历法,也称为公历。阴历是指以月亮围地球运行基础的历法,也称为农历。

阳历转阴历算法

阳历转阴历算法是一种将阳历日期转换为阴历日期的算法。下面是一个示例代码,用于实现阳历转阴历算法:

import datetime

def lunar(year, month, day):
    lunar_month_days = [
        0x1558, 0x04bd8, 0x0a5b6, 0x0d4a, 0x0da50, 0x06aa5, 0x06a50, 0x052d2, 0x04a95, 0x0b4a9,
        0x0a4b0, 0x0d8a7, 0x0c950, 0x0d4a0, 0x0da50, 0x07552, 0x056a9, 0x055d2, 0x052b0, 0x0a9a8,
        x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0x0e4, 0x0a570, 0x05260, 0x0f263, 0x0d950,
        0x05b57, 0x056a0, 0x096d0, 0x04dd5,0x04ad0, 0x0a4d9,0x0d4d0, 0x0d250, 0x0d558 0x0b540,
        0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0ba, 0x06a50, 0x0640, 0x0af46,
        0x0ab60, 0x09570,0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60,
        0x096d5, 0x092e0, 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, x07552, 0x056a0, 0x0abb7, 0x025d0,
        0x092d0, 0x05, 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9 0x04ba0, 0x0a5b0,0x15176,
        0x052b0, 0x0a930, 0x07954, 0x06aa0, 0x050, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260,
        0x0ea65, 0x0d530, 0x05aa0, 0x076a3, 0x096d0, 0x04bd7, 0x04ad, 0x0a4d0, 0x0d0b6, 0x0ea50,
        x0d550, 0x05da0
    ]

    lunar_month_days_leap = [
        0x1694, 0x04bd8, 0x0a5b6, 0x0d4a3, 0x0da, 0x06aa5, 0x06a50, 0x052d2, 0x04a, 0x0b4a9,
        0x0a4b0, 0x0b8a7, 0x0c950, 0x0d4a, 0x0da50, 0x07552, 0x056a9, 0x055d2, 0x052b0, 0x0a9a8,
        0x0e950, 0x06aa0, 0x0aea6, 0x0ab50, 0x04b60, 0xaae4,0x0a570, 0x05260, 0x0f263, 0x0d950,
        0x05b, 0x0560, 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d9, 0x0d4d0, 0x0d250, 0x0d558,0x0b540,
        0x0b5a0, 0x195a6, 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46,
        0x0ab60, 0x09570, 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x055c0, 0x0ab60,
        0x096d5, 0x092e0, 00c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0,
        0x092d0, 0x0cab5, 0x0a950, 00b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 00a5b0, 0x15176,
        0x052b0, 0x0a930, 0x07954, 0x06aa0 0x0ad50, 0x0552, 0x04b60, 0x0a6e6, 0x0a4e,0x0d260,
        0x0ea65, 0x0d530, 0x05aa0, 0x076a3,0x096d0, 0x04bd7, 0x04ad0, 0x0a4d0, 0x0d0b6, 0x0ea50,
        x0d550, 0x05da0 0x0b5a3, 0x056d0, 0x055b0, 0049b0, 0x0a577, x0a4b0, 0x0aa50, 0x1b255,
        0x06d20, 0x0ada0
    ]

    lunar_month_days = lunar_month_days_leap if leap_month(year) else lunar_month_days

    total_days = (datetime.date(year, month, day) - datetime.date(1900, 1, 31)).days
    offset_days = 0

    lunar_year = year
    lunar_month =     lunar_day = 1

    while True:
        days = lunar_month_days[offset_days]
        offset_days += days

        if total_days < offset_days:
            break

        lunar_year += 1
        total_days -= days

    lunar_year_days = year_days(lunar_year)
    leap = leap_month(lunar_year)

    for i in range(1, 13):
        days = lunar_month_days[i - 1]

        if leap and i == leap + 1:
            days = leap_days(lunar_year)

        if total_days < days:
            lunar_month = i
            lunar_day = total_days + 1
            break

        total_days -= days

    return lunar_year, lunar_month, lunar_day

def year_days(year):
    days = 0

    for i in range(1, 13):
        days += month_days(year, i)

    return days

def month_days(year, month):
    if leap_month(year) and month == leap_month(year) + 1:
        return leap_days(year)

    return lunar_month_days[month - 1]

def leap_month(year):
    return (lunar_month_days[year - 1900] & 0xf)

def leap_days(year):
    if leap_month(year) and (lunar_month_days[year - 1900] & (0x10000 leap_month(year))):
        return 

    return 29

这个代码使用了一些常量和函数来实现阳历转阴历算法。我们首先定义了一个lunar函数,它采用年、月和作为参数,并返回阴历日期。我们还定义了一些辅助函数,如year_days、month_days、leap_month和leap_days,它们用于计算阴历年、月和日的天数。

示例1:使用阳历转阴历算法

让我们使用阳历转阴历算法将阳历日期转换为阴历日期。我们将以下代码:

year, month, day = 2023, 5, 14
lunar_year, lunar_month, lunar_day = lunar(year, month, day)
print(f'{year}-{month}-{day} 对应的阴历日期为:{lunar_year}-{lunar_month}-{lunar_day}')

这个代码使用阳历转阴历算法将2023年5月14日转换为阴历日期。我们首先定义了年、月和日的变量,然后调用lunar函数,并将它们作为参数传递。最后,我们打印输出结果。

示例2:阳历转阴历算批量转换日期

让我们使用阳历转阴历算法批量转换日期。我们以下代码:

dates = [
    (2023, 5, 14),
    (2023, 6, 1),
    (2023, 7, 7),
    (2023, 8, 22),
    (2023, 9, 10),
    (2023,10, 1),
    (2023, 11, 11),
    (2023, 12,25)
]

for date in dates:
    year, month, day = date
    lunar_year, lunar_month, lunar_day = lunar(year, month, day)
    print(f'{year}-{month}-{day} 对应的阴历日期为:{lunar_year}-{lunar_month}-{lunar_day}')

这个代码使用阳历转阴历算法批量转换日期。我们首先定义了一个日期列表dates,它包含要转换的日期。然后我们使用for循环遍历日期列表,并调用lunar函数将每日期转为阴历日期。最后,我们打印输出结果。

希望这个攻略帮助你理解如何使用Python实现阳历转阴算法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python实现的阳历转阴历(农历)算法 - Python技术站

(1)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python 实现PIL模块在图片画线写字

    如果要在Python中对图片进行处理,常用的模块是Python Imaging Library (PIL)。PIL提供了很多操作图片的方法,包括在图片上描绘线条和文字。 在Python中实现PIL模块在图片画线写字需要安装PIL模块。可以用pip指令安装:pip install Pillow,或者直接从官网下载安装包手动安装。 接下来,我们来讲两个示例来说明…

    python 2023年5月13日
    00
  • python 淘宝爬虫小实例

    Python 淘宝爬虫小实例 简介 这是一个使用Python编写的淘宝爬虫,可以帮助我们获取淘宝中任意商品的价格、销量、收入等信息。 准备工作 使用Python编写爬虫需要安装requests库和BeautifulSoup库。可以使用以下命令进行安装: pip install requests pip install beautifulsoup4 爬取数据 …

    python 2023年5月14日
    00
  • Python中SOAP项目的介绍及其在web开发中的应用

    Python中SOAP项目的介绍及其在web开发中的应用 SOAP(Simple Object Access Protocol)是一种基于XML的协议,用于交换数据以及进行远程过程调用(RPC)。SOAP使用HTTP,SMTP,FTP等协议作为传输协议,可以在不同的操作系统和编程语言之间进行通信。 在Python中,有多个第三方库支持SOAP协议,例如sud…

    python 2023年6月3日
    00
  • 如何解决cmd运行python提示不是内部命令

    如果在使用命令行或者终端(如cmd或者powershell)运行python脚本时出现“python不是内部或外部命令,也不是可运行的程序或批处理文件”错误,一般是环境变量设置不正确导致的。为了解决这个问题,我们需要按照以下步骤进行操作。 确定Python安装路径 首先需要确认Python的安装路径,比如在Windows系统上,Python通常安装在C盘Pr…

    python 2023年5月20日
    00
  • 查找NumPy数组中一个序列的出现次数

    查找NumPy数组中一个序列的出现次数可以通过NumPy包中的函数来实现。具体步骤如下: 导入NumPy包 import numpy as np 创建一个NumPy数组 a = np.array([1, 2, 3, 4, 5, 2, 3, 1, 2]) 创建一个要查找的序列 seq = np.array([1, 2]) 使用NumPy包中的frombuffe…

    python-answer 2023年3月25日
    00
  • python输入多行字符串的方法总结

    Python是一种高级编程语言,很适合用于处理字符串。在处理字符串时,有时候需要读取多行输入,而输入的内容可能是相对较长的一段文本。本文将总结Python中输入多行字符串的几种方式。 方法一:使用三引号 在Python中,可以使用三个引号(单引号或双引号)来表示一段文本,在这段文本中可以包含多行。 代码示例 text = ”’这是第一行 这是第二行 这是第…

    python 2023年6月5日
    00
  • python字典key不能是可以是啥类型

    Python字典key的限制 问题描述 在Python中,字典(dict)是一种非常常用的数据类型,它允许你按照键-值(key-value)的方式存储和访问数据。 字典的键(key)需要是一个可哈希(hashable)的数据类型。但实际上,这还有很多限制,比如有一些数据类型是不能作为键的。本文将详细讲解Python字典key不能是可以是啥类型。 不能作为字典…

    python 2023年5月13日
    00
  • Python3.5多进程原理与用法实例分析

    Python3.5多进程原理与用法实例分析 1. 多进程简介 多进程是一种方式,通过启动多个进程并发执行不同的任务,来提高程序的运行效率。Python中提供了多种方式实现多进程,包括subprocess、multiprocessing、os.fork()等,其中multiprocessing是Python自带的一个多进程模块,其封装了底层的C语言模块_mul…

    python 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部