Skip to content

v3.5.6发布日志

发布日期:2022年7月3日

概述

v3.5.6是一个引入若干个特性的版本,这些特性不会对已有逻辑进行破坏性更新。主要包含:

  • 新增 LunarDate.strptime 反向解析函数
  • LunarDate 农历日期新增格式化修饰符 %c
  • WrappedDate 新增simple_str 简化显示方法。如:“2022年5月7日(四月初七)” 。
  • 星期型节日 WeekFestival 新增倒数序号和每月频率
  • FestivalLibrary 功能增强
  • 新增新的节日库 ext1

1 农历

日期反向解析 strptime

从文本字符串解析农历日期 LunarDate 对象。

from borax.calendars.lunardate import LunarDate

ld = LunarDate.strptime('二〇二二年四月初三', '%Y年%L%M月%D')
print(ld) # LunarDate(2022, 4, 3, 0)

新的格式化修饰符:%c

新的修饰符 %c 显示中文月日信息,不显示年份信息,等效于 %L%N月%D

from borax.calendars.lunardate import LunarDate

print(LunarDate(2022, 4, 3).strftime('%c')) # '四月初三'
print(LunarDate(2020, 4, 22).strftime('%c')) # '闰四月廿二'

该修饰符通常用于和公历日期同时显示的场景,在该种场景下,农历年份总是很容易推导。

from borax.calendars.festivals2 import WrappedDate

wd = WrappedDate(LunarDate(2022, 3, 4))
print(f'{wd.solar}({wd.lunar:%c})') # '2022-04-04(三月初四)'

干支工具

新增干支序号和干支文字的转化。

0 甲子
1 乙丑
  ...
59 癸亥
示例

>>>TextUtils.offset2gz(0)
"甲子"
>>>TextUtils.gz2offset("癸亥")
59
>>>TextUtils.gz2offset("甲丑")
ValueError("Invalid gz string:甲丑.")

2 星期型节日

序号支持倒数

使用场景:国际麻风节

# 每年1月的最后一个星期日
mafeng = WeekFestival(month=1, index=-1, week=calendar.SUNDAY, name='国际麻风节')
在编码序列化上,index字段(左起第四五位)中第四位表示正向或倒数(取值1)。

206036 父亲节 6月第3个星期日
201116 国际麻风节 1月第倒数第1个星期日(week=6)

支持每月属性

允许 WeekFestival 中 month 取值为0,表示“每月”频率。

last_sunday_monthly = WeekFestival(month=0, index=-1, week=calendar.SUNDAY)

综合示例

WeekFestival支持以下的定义方式:

fs2 = WeekFestival(month=4, index=1, week=calendar.SUMDAY) # 每年4月第1个星期日

fs3 = WeekFestival(month=0, index=1, week=calendar.SUMDAY) # 每月第1个星期日

fs4 = WeekFestival(freq=FreqConst.MONTHLY, index=1, week=calendar.SUNDAY) # 每月第1个星期日

fs5 = WeekFestival(feq=FreqConst.MONTHLY, index=-1, week=calendar.SUNDAY) # 每月最后一个星期日

3 节气型节日

新增支持基于节气的某些节日。“初伏”为“夏至起的第三个庚日”,可定义为:

tf = TermFestival('夏至', nth=3, day_gz='庚')

类似的节日有:三伏天、九九天、入梅、出梅。

4 节日属性Festival

新增分类属性

新增 Festival.catalog 属性,显示节日对象的分类属性。可用的属性值包括:

属性 描述
life 诞辰逝世纪念日
event 事件纪念日,机构成立日
other 其他型节日
public 公共节日
tradition 传统节日

导出csv文件

使用 to_csv 函数可以导出到文件。

fl = FestivalLibrary.load_builtin()
fl.to_csv('my_festivals.csv')

5 内置数据库

新的节日库 ext1 包含了许多国际、行业性节日,数目在360+,使用下列代码加载。

fl = FestivalLibrary.load_builtin('ext1')

示例数据

001010,元旦,public
001100,中国人民警察节,public
001260,国际海关日,public
...
206025,文化和自然遗产日,public
207015,国际合作节,public
209025,世界急救日,public