在Python中处理农历日期:自定义格式化方法 【附:python生成Excel日历/-带有农历注释 完整代码】

引言

在中华文化中,农历日期对于许多传统节日和日常生活都有着重要的意义。然而,Python标准库并未内置对农历日期的处理功能,因此我们需要依赖第三方库来处理农历日期。在这篇博客中,我们将探讨如何在Python中使用lunardate库来处理农历日期,并如何自定义格式化方法以将农历日期转换为特定的字符串格式。

一、安装lunardate库

首先,我们需要安装lunardate库。你可以使用pip来安装这个库:

pip install lunardate

二、基本使用

lunardate库提供了LunarDate类,该类包含了一些属性和方法用于表示和操作农历日期。以下是一些基本的使用方法:
创建农历日期对象
你可以使用LunarDate类来创建一个农历日期对象。然而,需要注意的是,lunardate库并没有直接提供从公历日期创建农历日期的方法,你可能需要依赖其他库或手动查找转换关系。

from lunardate import LunarDate  

假设你已经有了农历日期的年、月、日信息

lunar_date = LunarDate(2023, 2, 1)

获取农历日期属性
LunarDate对象包含了年、月、日等属性,你可以直接访问这些属性来获取农历日期的信息。

year = lunar_date.year  
month = lunar_date.month  
day = lunar_date.day  
print(f"农历日期:{year}{month}{day}日")

三、自定义格式化方法

由于lunardate库没有提供strftime这样的方法,我们需要自定义一个函数来格式化农历日期。这个函数可以接收一个LunarDate对象,然后返回一个按照指定格式字符串生成的字符串。
下面是一个简单的格式化函数的示例:

def format_lunar_date(lunar_date: LunarDate, format_str: str) -> str:  """  自定义农历日期格式化函数  :param lunar_date: LunarDate对象  :param format_str: 格式字符串,例如"%Y年%m月%d日"  :return: 格式化后的字符串  """  parts = []  for char in format_str:  if char == '%':  # 处理格式说明符  next_char = format_str[1] if len(format_str) > 1 else ''  if next_char == 'Y':  parts.append(str(lunar_date.year))  elif next_char == 'm':  parts.append(str(lunar_date.month))  elif next_char == 'd':  parts.append(str(lunar_date.day))  else:  # 不支持的格式说明符,直接添加到结果字符串中  parts.append('%' + next_char)  else:  # 非格式说明符字符,直接添加到结果字符串中  parts.append(char)  return ''.join(parts)

这个函数通过遍历格式字符串中的每个字符,并根据字符是否是格式说明符来处理农历日期的格式化。如果字符是格式说明符(以%开头),函数会根据说明符的类型(如%Y、%m、%d)来提取农历日期的相应部分,并将其添加到结果字符串中。如果字符不是格式说明符,函数会将其直接添加到结果字符串中。
四、使用示例
现在我们可以使用自定义的格式化函数来将农历日期转换为特定的字符串格式了。以下是一个使用示例:

from lunardate import LunarDate  # 创建一个农历日期对象  
lunar_date = LunarDate(2023, 2, 1)  # 使用自定义的格式化函数来格式化农历日期  
formatted_date = format_lunar_date(lunar_date, "%Y年%m月%d日")  # 打印格式化后的日期字符串  
print(formatted_date)  
# 输出:2023年02月01日

在这个示例中,我们创建了一个表示2023年农历正月初一的LunarDate对象,然后使用自定义的format_lunar_date函数将其格式化为"2023年02月01日"这样的字符串。

五、总结

在这篇博客中,我们探讨了如何在Python中使用lunardate库来处理农历日期,并自定义了格式化方法来将农历日期转换为特定的字符串格式。我们首先介绍了lunardate`库的基本使用方法,包括如何创建农历日期对象和获取农历日期的属性。然后,我们详细阐述了如何自定义格式化函数,该函数能够根据指定的格式字符串来格式化农历日期。最后,我们提供了一个使用示例,展示了如何使用自定义的格式化函数来将农历日期转换为字符串。
通过这篇博客,你应该对如何在Python中处理农历日期有了更深入的了解,并且掌握了自定义格式化方法的基本思路。希望这些信息能够帮助你在实际项目中更好地处理农历日期,并且为你的开发工作带来便利。

六、进一步探讨

虽然lunardate库提供了一些基本的农历日期处理功能,但在实际应用中,我们可能还需要考虑更多的情况。例如,农历日期的计算涉及到复杂的农历算法,而lunardate库可能并不包含所有的农历计算逻辑。此外,对于某些特定的农历日期转换需求,我们可能需要依赖其他更专业的农历计算库或工具。
另外,由于农历日期的特性,某些农历月份可能没有对应的公历日期,或者公历日期可能对应多个农历日期。因此,在进行农历日期处理时,我们需要特别注意这些边界情况,并采取相应的处理措施。

七、参考资料

lunardate官方文档
其他农历处理库或工具

结语

农历日期处理在中华文化和日常生活中具有重要意义。通过学习和掌握Python中的农历日期处理方法和自定义格式化技巧,我们可以更好地应对实际项目中的需求,并为用户提供更准确、便捷的日期转换功能。希望这篇博客能够帮助你更深入地了解农历日期处理,并在实际开发中发挥出更大的作用。

完整应用代码1:python生成Excel日历

import openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import column_index_from_string  # 不再需要 get_column_letter
from datetime import datetime, timedelta# 创建一个新的工作簿
wb = openpyxl.Workbook()
ws = wb.active# 设置标题行
ws.append(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])# 设置起始和结束日期
start_date = datetime(2024, 2, 1)
end_date = datetime(2024, 3, 1)  # 下一个月的第一天# 设置填充颜色
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")# 生成日历
current_date = start_date
row = 2  # 从第二行开始写入日期
while current_date < end_date:# 计算当前日期是星期几weekday = current_date.weekday()# 如果当前日期是星期一,则开始新的一周if weekday == 0:col = 1  # A列对应的整数索引是1row += 1else:col = weekday + 1  # 直接使用整数索引,星期一为1,星期二为2,依此类推# 写入日期到工作表ws.cell(row=row, column=col, value=current_date.strftime("%d"))ws.cell(row=row, column=col).fill = fill  # 设置填充颜色# 更新日期current_date += timedelta(days=1)# 保存工作簿  
wb.save("2024_February_Calendar.xlsx")

完整应用代码2:python生成Excel日历-带有农历注释

import openpyxl
from openpyxl.styles import PatternFill
from datetime import datetime, timedelta
from lunardate import LunarDate# 创建一个新的工作簿
wb = openpyxl.Workbook()
ws = wb.active# 设置标题行
ws.append(["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun", "农历"])# 设置起始和结束日期
start_date = datetime(2024, 2, 1)
end_date = datetime(2024, 3, 1)  # 下一个月的第一天# 设置填充颜色
fill = PatternFill(start_color="FFFF00", end_color="FFFF00", fill_type="solid")# 生成日历
current_date = start_date
row = 2  # 从第二行开始写入日期
while current_date < end_date:# 计算当前日期是星期几weekday = current_date.weekday()# 如果当前日期是星期一,则开始新的一周if weekday == 0:col = 1  # A列对应的整数索引是1lunar_date = LunarDate.fromSolarDate(current_date.year, current_date.month, current_date.day)ws.append([None, None, None, None, None, None, None, f"{lunar_date.year}{lunar_date.month}{lunar_date.day}日"])row += 1else:col = weekday + 1  # 直接使用整数索引,星期一为1,星期二为2,依此类推lunar_date = LunarDate.fromSolarDate(current_date.year, current_date.month, current_date.day)ws.cell(row=row, column=col, value=current_date.strftime("%d"))ws.cell(row=row, column=col).fill = fill  # 设置填充颜色print("(type(lunar_date):",type(lunar_date))ws.cell(row=row, column=col + 1, value=f"{lunar_date.year}{lunar_date.month}{lunar_date.day}日")# 更新日期current_date += timedelta(days=1)# 保存工作簿
wb.save("2024_February_Calendar_with_Lunar.xlsx")

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

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

相关文章

HarmonyOS4.0——IPC与RPC通信

基本概念 IPC&#xff08;Inter-Process Communication&#xff09;与RPC&#xff08;Remote Procedure Call&#xff09;用于实现跨进程通信&#xff0c;不同的是前者使用Binder驱动&#xff0c;用于设备内的跨进程通信&#xff0c;后者使用软总线驱动&#xff0c;用于跨设备…

【iOS ARKit】人形遮挡

人形遮挡简介 在 AR系统中&#xff0c;计算机通过对设备摄像头采集的图像进行视觉处理和组织&#xff0c;建立起实景空间&#xff0c;然后将生成的虚拟对象依据几何一致性原理嵌入到实景空间中&#xff0c;形成虚实融合的增强现实环境&#xff0c;再输出到显示系统中呈现给使用…

【数据结构】链表OJ面试题3(题库+解析)

1.前言 前五题在这http://t.csdnimg.cn/UeggB 后三题在这http://t.csdnimg.cn/gbohQ 记录每天的刷题&#xff0c;继续坚持&#xff01; 2.OJ题目训练 9. 给定一个链表&#xff0c;判断链表中是否有环。 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成…

MFC开发的功能如何进行UT测试

MFC&#xff08;Microsoft Foundation Classes&#xff09;是Microsoft提供的一个用于Windows应用程序开发的类库。在MFC开发中&#xff0c;单元测试&#xff08;UT&#xff0c;Unit Testing&#xff09;是一个重要的环节&#xff0c;它有助于确保各个功能模块按预期工作。单元…

c# 日历帮助类

public class CalendarHelper { #region 返回本年有多少天 /// <summary> /// 返回本年有多少天 /// </summary> /// <param name"year">年份</param> /// <returns>本年的天数</retu…

假期最好的安排:读书学习成长

假期是每个人放松身心、充电学习的好时机。然而&#xff0c;很多人往往会将假期用于休闲娱乐&#xff0c;错失了充实自己的宝贵机会。本文将介绍如何通过读书学习成长&#xff0c;让你度过一个充实、有意义的假期。 一、知识拓展 假期是知识拓展的好时机。你可以选择一些与你…

嵌入式中《C++之旅》阅读笔记

constexpr constexpr的隐含意思是在编译阶段求值&#xff0c;对于一些求值操作&#xff0c;如果声明为constexpr&#xff0c;那么会编译器会尝试在编译阶段进行计算求值&#xff0c;如果求值成功&#xff0c;则用结果进行替换。 一个常用的例子是如下&#xff1a; constexpr…

深入探索C语言中的sizeof关键字

在C语言中&#xff0c;sizeof是一个运算符&#xff0c;用于获取数据类型或对象在内存中的大小&#xff08;以字节为单位&#xff09;。这是一个非常有用的工具&#xff0c;它可以帮助我们理解不同数据类型如何占用内存&#xff0c;以及如何在编程时更有效地管理内存。 基本数据…

深入解析 Spring 事务机制

当构建复杂的企业级应用程序时&#xff0c;数据一致性和可靠性是至关重要的。Spring 框架提供了强大而灵活的事务管理机制&#xff0c;成为开发者处理事务的首选工具。本文将深入探讨 Spring 事务的使用和原理&#xff0c;为大家提供全面的了解和实际应用的指导。 本文概览 首…

如何用 npm 运行本地 js 文件

安装好 npm 后&#xff0c;cd 到待运行 js 文件的文件夹&#xff0c;运行 npm init&#xff0c;一步步敲回车&#xff0c;可修改可不修改&#xff0c;会生成 package.json 文件 scripts 中一定得是 start&#xff0c;如果是别的名字 js 不运行 确保你已经安装了Node.js和npm。…

题目 1244: 破解简单密码

题目描述 密码是我们生活中非常重要的东东&#xff0c;我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码&#xff0c;虽然简单但也安全。 假设老王原来一个BBS上的密码为zvbo941987,为了方便记忆&#xff0c;他通过一种算法把这个密码变换…

ORM模型类

模型 创建两个表 创建模型类 from django.db import models# Create your models here. class BookInfo(models.Model):name models.CharField(max_length10, uniqueTrue) # 书名pub_date models.DateField(nullTrue) # 发布时间read_count models.IntegerField(default…

8.Swift条件语句

Swift 条件语句 在 Swift 中&#xff0c;条件语句用于根据特定条件执行不同的代码块。Swift 提供了 if、guard、switch 等条件语句来实现不同的条件逻辑。以下是 Swift 中常用的条件语句&#xff1a; 一、if 语句 if 语句用于根据条件执行代码块。语法如下&#xff1a; if …

【JSON2WEB】04 amis低代码前端框架介绍

1 什么是 amis amis 是一个低代码前端框架&#xff0c;它使用 JSON 配置来生成页面&#xff0c;可以减少页面开发工作量&#xff0c;极大提升效率。 看到amis一句话的介绍&#xff0c;感觉就是JSON2WEB要找的前端框架。 amis是百度开源的框架&#xff0c;毕竟是大厂&#xff0c…

新概念英语第二册(55)

【New words and expressions】生词和短语&#xff08;19&#xff09; gold n. 金子 mine n. 矿 treasure n. 财宝 revealer n. 探测器 invent …

即插即用、简单有效的大语言模型推荐算法!港大联合百度推出RLMRec

论文链接&#xff1a; https://arxiv.org/abs/2310.15950 论文代码&#xff1a; https://github.com/HKUDS/RLMRec 实验室主页&#xff1a; https://sites.google.com/view/chaoh/group-join-us?authuser0 TLDR 本文从互信息最大化的理论角度出发&#xff0c;通过引入文本信号…

c# 正则表达式 帮助类

public class RegexHelper { /// <summary> /// 验证输入字符串是否与模式字符串匹配&#xff0c;匹配返回true /// </summary> /// <param name"input">输入字符串</param> /// <param nam…

使用No-SQL数据库支持连接查询用例的讨论

简介 在本文中&#xff0c;我们将简单介绍什么是No-SQL数据库。然后我们会讨论一种使用关系数据库比较容易实现的查询&#xff0c;即连接查询&#xff0c;怎么样使用No-SQL来实现。 什么是No-SQL数据库 与No-SQL数据库相对应的是传统的关系数据库&#xff08;RDBMS&#xff…

JRT监听程序

本次设计避免以往设计缺陷&#xff0c;老的主要为了保持兼容性&#xff0c;在用的设计就不好调了。 首先&#xff0c;接口抽象时候就不在给参数放仪器ID和处理类了&#xff0c;直接放仪器配置实体&#xff0c;接口实现想用什么属性就用什么属性&#xff0c;避免老方式要扩参数时…

java的excel列行合并模版

1.效果 2.模版 <tableborder"1"cellpadding"0"cellspacing"0"class"tablebor"id"TABLE"><tr align"center" class"bg217"><td style"background-color: #008000; color: #ffffff;p…