staran 1.0.6__py3-none-any.whl → 1.0.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- staran/__init__.py +1 -1
- staran/date/__init__.py +62 -2
- staran/date/core.py +731 -30
- staran/date/examples/enhanced_features.py +230 -0
- staran/date/examples/v108_features_demo.py +257 -0
- staran/date/i18n.py +376 -0
- staran/date/lunar.py +320 -0
- staran/date/tests/test_enhancements.py +295 -0
- staran/date/tests/test_v108_features.py +400 -0
- staran-1.0.8.dist-info/METADATA +371 -0
- staran-1.0.8.dist-info/RECORD +21 -0
- staran-1.0.6.dist-info/METADATA +0 -170
- staran-1.0.6.dist-info/RECORD +0 -15
- {staran-1.0.6.dist-info → staran-1.0.8.dist-info}/WHEEL +0 -0
- {staran-1.0.6.dist-info → staran-1.0.8.dist-info}/licenses/LICENSE +0 -0
- {staran-1.0.6.dist-info → staran-1.0.8.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,230 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
"""
|
5
|
+
Staran Date 模块增强功能演示
|
6
|
+
==========================
|
7
|
+
|
8
|
+
展示v1.0.7版本的所有新增和优化功能。
|
9
|
+
"""
|
10
|
+
|
11
|
+
import sys
|
12
|
+
import os
|
13
|
+
import json
|
14
|
+
|
15
|
+
# 添加项目根目录到路径
|
16
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
|
17
|
+
|
18
|
+
from staran.date import Date
|
19
|
+
|
20
|
+
|
21
|
+
def enhanced_holidays_demo():
|
22
|
+
"""增强的节假日功能演示"""
|
23
|
+
print("🎊 增强的节假日功能")
|
24
|
+
print("=" * 40)
|
25
|
+
|
26
|
+
# 中国节假日
|
27
|
+
print("中国节假日:")
|
28
|
+
cn_dates = ['20250101', '20250501', '20251001', '20250405']
|
29
|
+
for date_str in cn_dates:
|
30
|
+
date = Date(date_str)
|
31
|
+
is_holiday = date.is_holiday('CN')
|
32
|
+
status = "✅ 节假日" if is_holiday else "❌ 工作日"
|
33
|
+
print(f" {date.format_chinese()}: {status}")
|
34
|
+
|
35
|
+
# 美国节假日
|
36
|
+
print("\n美国节假日:")
|
37
|
+
us_dates = ['20250101', '20250704', '20251225', '20251127']
|
38
|
+
for date_str in us_dates:
|
39
|
+
date = Date(date_str)
|
40
|
+
is_holiday = date.is_holiday('US')
|
41
|
+
status = "✅ 节假日" if is_holiday else "❌ 工作日"
|
42
|
+
print(f" {date.format_iso()}: {status}")
|
43
|
+
|
44
|
+
print()
|
45
|
+
|
46
|
+
|
47
|
+
def batch_processing_demo():
|
48
|
+
"""批量处理功能演示"""
|
49
|
+
print("⚡ 批量处理功能")
|
50
|
+
print("=" * 40)
|
51
|
+
|
52
|
+
# 批量创建
|
53
|
+
date_strings = ['20250101', '20250201', '20250301', '20250401']
|
54
|
+
dates = Date.batch_create(date_strings)
|
55
|
+
print("批量创建结果:")
|
56
|
+
for i, date in enumerate(dates):
|
57
|
+
print(f" {date_strings[i]} -> {date}")
|
58
|
+
|
59
|
+
# 批量格式化
|
60
|
+
print("\n批量格式化:")
|
61
|
+
iso_formats = Date.batch_format(dates, 'iso')
|
62
|
+
chinese_formats = Date.batch_format(dates, 'chinese')
|
63
|
+
|
64
|
+
for i, date in enumerate(dates):
|
65
|
+
print(f" 原始: {date}")
|
66
|
+
print(f" ISO: {iso_formats[i]}")
|
67
|
+
print(f" 中文: {chinese_formats[i]}")
|
68
|
+
print()
|
69
|
+
|
70
|
+
|
71
|
+
def timezone_demo():
|
72
|
+
"""时区支持演示"""
|
73
|
+
print("🌍 时区支持功能")
|
74
|
+
print("=" * 40)
|
75
|
+
|
76
|
+
date = Date('20250101')
|
77
|
+
|
78
|
+
# 不同时区的时间戳
|
79
|
+
utc_timestamp = date.to_timestamp(0) # UTC
|
80
|
+
beijing_timestamp = date.to_timestamp(8) # 北京时间 (UTC+8)
|
81
|
+
ny_timestamp = date.to_timestamp(-5) # 纽约时间 (UTC-5)
|
82
|
+
|
83
|
+
print("同一日期在不同时区的时间戳:")
|
84
|
+
print(f" UTC: {utc_timestamp}")
|
85
|
+
print(f" 北京时间: {beijing_timestamp}")
|
86
|
+
print(f" 纽约时间: {ny_timestamp}")
|
87
|
+
|
88
|
+
# 从时间戳创建日期
|
89
|
+
print("\n从时间戳创建日期:")
|
90
|
+
base_timestamp = 1735689600 # 2025-01-01 00:00:00 UTC
|
91
|
+
utc_date = Date.from_timestamp(base_timestamp, 0)
|
92
|
+
beijing_date = Date.from_timestamp(base_timestamp, 8)
|
93
|
+
|
94
|
+
print(f" UTC时间戳 -> {utc_date.format_iso()}")
|
95
|
+
print(f" +8小时偏移 -> {beijing_date.format_iso()}")
|
96
|
+
print()
|
97
|
+
|
98
|
+
|
99
|
+
def business_rules_demo():
|
100
|
+
"""业务规则演示"""
|
101
|
+
print("📊 业务规则功能")
|
102
|
+
print("=" * 40)
|
103
|
+
|
104
|
+
date = Date('20250415') # 2025年4月15日
|
105
|
+
|
106
|
+
print(f"基准日期: {date.format_chinese()}")
|
107
|
+
|
108
|
+
# 各种业务规则
|
109
|
+
rules = [
|
110
|
+
('month_end', '月末'),
|
111
|
+
('quarter_end', '季度末'),
|
112
|
+
('next_business_day', '下一个工作日'),
|
113
|
+
('prev_business_day', '上一个工作日')
|
114
|
+
]
|
115
|
+
|
116
|
+
for rule, description in rules:
|
117
|
+
try:
|
118
|
+
result = date.apply_business_rule(rule)
|
119
|
+
print(f" {description}: {result.format_chinese()}")
|
120
|
+
except ValueError as e:
|
121
|
+
print(f" {description}: {e}")
|
122
|
+
|
123
|
+
print()
|
124
|
+
|
125
|
+
|
126
|
+
def enhanced_json_demo():
|
127
|
+
"""增强JSON功能演示"""
|
128
|
+
print("📄 增强JSON序列化")
|
129
|
+
print("=" * 40)
|
130
|
+
|
131
|
+
date = Date('20250415')
|
132
|
+
|
133
|
+
# 包含元数据的JSON
|
134
|
+
json_with_meta = date.to_json(include_metadata=True)
|
135
|
+
json_simple = date.to_json(include_metadata=False)
|
136
|
+
|
137
|
+
print("包含元数据的JSON:")
|
138
|
+
print(json.dumps(json.loads(json_with_meta), indent=2, ensure_ascii=False))
|
139
|
+
|
140
|
+
print("\n简单JSON:")
|
141
|
+
print(json.dumps(json.loads(json_simple), indent=2, ensure_ascii=False))
|
142
|
+
|
143
|
+
# 字典转换
|
144
|
+
dict_with_meta = date.to_dict(include_metadata=True)
|
145
|
+
print("\n包含元数据的字典:")
|
146
|
+
for key, value in dict_with_meta.items():
|
147
|
+
print(f" {key}: {value}")
|
148
|
+
|
149
|
+
print()
|
150
|
+
|
151
|
+
|
152
|
+
def date_ranges_demo():
|
153
|
+
"""日期范围功能演示"""
|
154
|
+
print("📅 新增日期范围功能")
|
155
|
+
print("=" * 40)
|
156
|
+
|
157
|
+
# 工作日和周末
|
158
|
+
print("一周的工作日和周末:")
|
159
|
+
business_days = Date.business_days('20250407', '20250413') # 一周
|
160
|
+
weekends = Date.weekends('20250407', '20250413')
|
161
|
+
|
162
|
+
print(" 工作日:", [str(d) for d in business_days])
|
163
|
+
print(" 周末:", [str(d) for d in weekends])
|
164
|
+
|
165
|
+
# 月份范围
|
166
|
+
print("\n月份范围 (前3个月):")
|
167
|
+
months = Date.month_range('202501', 3)
|
168
|
+
for month in months:
|
169
|
+
print(f" {month} ({month.format_chinese()})")
|
170
|
+
|
171
|
+
# 季度日期
|
172
|
+
print("\n2025年季度划分:")
|
173
|
+
quarters = Date.quarter_dates(2025)
|
174
|
+
for q, (start, end) in quarters.items():
|
175
|
+
print(f" Q{q}: {start.format_compact()} - {end.format_compact()}")
|
176
|
+
|
177
|
+
print()
|
178
|
+
|
179
|
+
|
180
|
+
def validation_demo():
|
181
|
+
"""验证功能演示"""
|
182
|
+
print("✅ 日期验证功能")
|
183
|
+
print("=" * 40)
|
184
|
+
|
185
|
+
test_strings = [
|
186
|
+
'20250415', # 有效
|
187
|
+
'20250230', # 无效 - 2月30日
|
188
|
+
'202504', # 有效
|
189
|
+
'invalid', # 无效
|
190
|
+
'20251301', # 无效 - 13月
|
191
|
+
]
|
192
|
+
|
193
|
+
print("日期字符串验证:")
|
194
|
+
for test_str in test_strings:
|
195
|
+
is_valid = Date.is_valid_date_string(test_str)
|
196
|
+
status = "✅ 有效" if is_valid else "❌ 无效"
|
197
|
+
print(f" '{test_str}': {status}")
|
198
|
+
|
199
|
+
print()
|
200
|
+
|
201
|
+
|
202
|
+
def main():
|
203
|
+
"""主演示函数"""
|
204
|
+
print("✨ Staran Date 模块 v1.0.7 增强功能演示")
|
205
|
+
print("=" * 50)
|
206
|
+
print()
|
207
|
+
|
208
|
+
# 运行各个演示
|
209
|
+
enhanced_holidays_demo()
|
210
|
+
batch_processing_demo()
|
211
|
+
timezone_demo()
|
212
|
+
business_rules_demo()
|
213
|
+
enhanced_json_demo()
|
214
|
+
date_ranges_demo()
|
215
|
+
validation_demo()
|
216
|
+
|
217
|
+
print("🎉 演示完成!")
|
218
|
+
print("\n📝 总结:")
|
219
|
+
print(" • 增强的节假日支持 (多国节假日)")
|
220
|
+
print(" • 高效的批量处理功能")
|
221
|
+
print(" • 基础时区转换支持")
|
222
|
+
print(" • 灵活的业务规则引擎")
|
223
|
+
print(" • 增强的JSON序列化")
|
224
|
+
print(" • 丰富的日期范围生成")
|
225
|
+
print(" • 严格的数据验证")
|
226
|
+
print("\n更多功能请查阅API文档! 📚")
|
227
|
+
|
228
|
+
|
229
|
+
if __name__ == '__main__':
|
230
|
+
main()
|
@@ -0,0 +1,257 @@
|
|
1
|
+
#!/usr/bin/env python3
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
"""
|
5
|
+
Staran v1.0.8 新功能演示
|
6
|
+
=======================
|
7
|
+
|
8
|
+
演示农历支持和多语言功能的使用方法。
|
9
|
+
"""
|
10
|
+
|
11
|
+
import sys
|
12
|
+
import os
|
13
|
+
|
14
|
+
# 添加项目根目录到路径
|
15
|
+
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', '..', '..'))
|
16
|
+
|
17
|
+
from staran.date import Date, from_lunar, set_language, get_language
|
18
|
+
from staran.date.lunar import LunarDate
|
19
|
+
from staran.date.i18n import Language
|
20
|
+
|
21
|
+
def demo_lunar_features():
|
22
|
+
"""演示农历功能"""
|
23
|
+
print("🌙 农历功能演示")
|
24
|
+
print("=" * 50)
|
25
|
+
|
26
|
+
# 1. 从农历日期创建公历日期
|
27
|
+
print("1. 从农历日期创建公历日期")
|
28
|
+
lunar_new_year = Date.from_lunar(2025, 1, 1) # 农历2025年正月初一
|
29
|
+
print(f" 农历2025年正月初一 → {lunar_new_year.format_iso()}")
|
30
|
+
|
31
|
+
mid_autumn = Date.from_lunar(2025, 8, 15) # 农历中秋节
|
32
|
+
print(f" 农历2025年八月十五 → {mid_autumn.format_iso()}")
|
33
|
+
|
34
|
+
# 2. 从农历字符串创建
|
35
|
+
print("\n2. 从农历字符串创建")
|
36
|
+
date_from_str = Date.from_lunar_string("20250315") # 农历三月十五
|
37
|
+
print(f" '20250315' → {date_from_str.format_iso()}")
|
38
|
+
|
39
|
+
# 闰月示例(假设2025年有闰月)
|
40
|
+
try:
|
41
|
+
leap_date = Date.from_lunar_string("2025闰0415") # 农历闰四月十五
|
42
|
+
print(f" '2025闰0415' → {leap_date.format_iso()}")
|
43
|
+
except:
|
44
|
+
print(f" 闰月示例跳过(2025年可能无闰四月)")
|
45
|
+
|
46
|
+
# 3. 公历转农历
|
47
|
+
print("\n3. 公历转农历")
|
48
|
+
solar_date = Date("20250415")
|
49
|
+
lunar = solar_date.to_lunar()
|
50
|
+
print(f" {solar_date.format_iso()} → {lunar.format_chinese()}")
|
51
|
+
print(f" 紧凑格式: {lunar.format_compact()}")
|
52
|
+
print(f" 天干地支: {lunar.get_ganzhi_year()}")
|
53
|
+
print(f" 生肖: {lunar.get_zodiac()}")
|
54
|
+
|
55
|
+
# 4. 农历格式化
|
56
|
+
print("\n4. 农历格式化")
|
57
|
+
test_date = Date("20250129") # 接近春节的日期
|
58
|
+
print(f" 基本格式: {test_date.format_lunar()}")
|
59
|
+
print(f" 包含生肖: {test_date.format_lunar(include_zodiac=True)}")
|
60
|
+
print(f" 紧凑格式: {test_date.format_lunar_compact()}")
|
61
|
+
|
62
|
+
# 5. 农历判断
|
63
|
+
print("\n5. 农历判断")
|
64
|
+
spring_festival = Date.from_lunar(2025, 1, 1)
|
65
|
+
print(f" 农历正月初一:")
|
66
|
+
print(f" 是否农历新年: {spring_festival.is_lunar_new_year()}")
|
67
|
+
print(f" 是否农历月初: {spring_festival.is_lunar_month_start()}")
|
68
|
+
print(f" 是否农历月中: {spring_festival.is_lunar_month_mid()}")
|
69
|
+
|
70
|
+
lantern_festival = Date.from_lunar(2025, 1, 15)
|
71
|
+
print(f" 农历正月十五:")
|
72
|
+
print(f" 是否农历新年: {lantern_festival.is_lunar_new_year()}")
|
73
|
+
print(f" 是否农历月中: {lantern_festival.is_lunar_month_mid()}")
|
74
|
+
|
75
|
+
# 6. 农历比较
|
76
|
+
print("\n6. 农历比较")
|
77
|
+
date1 = Date.from_lunar(2025, 1, 1)
|
78
|
+
date2 = Date.from_lunar(2025, 1, 15)
|
79
|
+
print(f" {date1.format_lunar()} vs {date2.format_lunar()}")
|
80
|
+
print(f" 比较结果: {date1.compare_lunar(date2)}") # -1: 前者小于后者
|
81
|
+
print(f" 是否同月: {date1.is_same_lunar_month(date2)}")
|
82
|
+
print(f" 是否同日: {date1.is_same_lunar_day(date2)}")
|
83
|
+
|
84
|
+
|
85
|
+
def demo_multilanguage_features():
|
86
|
+
"""演示多语言功能"""
|
87
|
+
print("\n\n🌍 多语言功能演示")
|
88
|
+
print("=" * 50)
|
89
|
+
|
90
|
+
# 测试日期
|
91
|
+
test_date = Date("20250415") # 2025年4月15日,星期二
|
92
|
+
|
93
|
+
print(f"测试日期: {test_date.format_iso()}")
|
94
|
+
|
95
|
+
# 1. 全局语言设置
|
96
|
+
print("\n1. 全局语言设置")
|
97
|
+
print(f" 当前语言: {get_language()}")
|
98
|
+
print(f" 支持的语言: {Date.get_supported_languages()}")
|
99
|
+
|
100
|
+
# 2. 中文简体
|
101
|
+
print("\n2. 中文简体 (zh_CN)")
|
102
|
+
set_language('zh_CN')
|
103
|
+
print(f" 本地化格式: {test_date.format_localized()}")
|
104
|
+
print(f" 星期格式: {test_date.format_weekday_localized()}")
|
105
|
+
print(f" 月份格式: {test_date.format_month_localized()}")
|
106
|
+
print(f" 季度格式: {test_date.format_quarter_localized()}")
|
107
|
+
print(f" 相对时间: {test_date.format_relative_localized()}")
|
108
|
+
|
109
|
+
# 3. 中文繁体
|
110
|
+
print("\n3. 中文繁体 (zh_TW)")
|
111
|
+
set_language('zh_TW')
|
112
|
+
print(f" 本地化格式: {test_date.format_localized()}")
|
113
|
+
print(f" 星期格式: {test_date.format_weekday_localized()}")
|
114
|
+
print(f" 相对时间: {test_date.format_relative_localized()}")
|
115
|
+
|
116
|
+
# 4. 日语
|
117
|
+
print("\n4. 日语 (ja_JP)")
|
118
|
+
set_language('ja_JP')
|
119
|
+
print(f" 本地化格式: {test_date.format_localized()}")
|
120
|
+
print(f" 星期格式: {test_date.format_weekday_localized()}")
|
121
|
+
print(f" 星期短格式: {test_date.format_weekday_localized(short=True)}")
|
122
|
+
print(f" 月份格式: {test_date.format_month_localized()}")
|
123
|
+
print(f" 相对时间: {test_date.format_relative_localized()}")
|
124
|
+
|
125
|
+
# 5. 英语
|
126
|
+
print("\n5. 英语 (en_US)")
|
127
|
+
set_language('en_US')
|
128
|
+
print(f" 本地化格式: {test_date.format_localized()}")
|
129
|
+
print(f" 星期格式: {test_date.format_weekday_localized()}")
|
130
|
+
print(f" 月份格式: {test_date.format_month_localized()}")
|
131
|
+
print(f" 季度格式: {test_date.format_quarter_localized()}")
|
132
|
+
print(f" 相对时间: {test_date.format_relative_localized()}")
|
133
|
+
|
134
|
+
# 6. 单次覆盖演示
|
135
|
+
print("\n6. 单次语言覆盖")
|
136
|
+
set_language('zh_CN') # 设置全局为中文
|
137
|
+
print(f" 全局中文: {test_date.format_weekday_localized()}")
|
138
|
+
print(f" 单次英语: {test_date.format_weekday_localized(language_code='en_US')}")
|
139
|
+
print(f" 仍是中文: {test_date.format_weekday_localized()}")
|
140
|
+
|
141
|
+
# 7. 相对时间多语言演示
|
142
|
+
print("\n7. 相对时间多语言演示")
|
143
|
+
today = Date.today()
|
144
|
+
tomorrow = today.add_days(1)
|
145
|
+
yesterday = today.add_days(-1)
|
146
|
+
next_week = today.add_days(7)
|
147
|
+
|
148
|
+
languages = ['zh_CN', 'zh_TW', 'ja_JP', 'en_US']
|
149
|
+
|
150
|
+
for lang in languages:
|
151
|
+
set_language(lang)
|
152
|
+
lang_name = Date.get_supported_languages()[lang]
|
153
|
+
print(f" {lang_name}:")
|
154
|
+
print(f" 今天: {today.format_relative_localized()}")
|
155
|
+
print(f" 明天: {tomorrow.format_relative_localized()}")
|
156
|
+
print(f" 昨天: {yesterday.format_relative_localized()}")
|
157
|
+
print(f" 下周: {next_week.format_relative_localized()}")
|
158
|
+
|
159
|
+
|
160
|
+
def demo_combined_features():
|
161
|
+
"""演示农历和多语言组合功能"""
|
162
|
+
print("\n\n🔄 农历 + 多语言组合演示")
|
163
|
+
print("=" * 50)
|
164
|
+
|
165
|
+
# 中国传统节日
|
166
|
+
spring_festival = Date.from_lunar(2025, 1, 1) # 春节
|
167
|
+
mid_autumn = Date.from_lunar(2025, 8, 15) # 中秋
|
168
|
+
|
169
|
+
festivals = [
|
170
|
+
(spring_festival, "春节(农历正月初一)"),
|
171
|
+
(mid_autumn, "中秋节(农历八月十五)")
|
172
|
+
]
|
173
|
+
|
174
|
+
languages = ['zh_CN', 'zh_TW', 'ja_JP', 'en_US']
|
175
|
+
|
176
|
+
for date, festival_name in festivals:
|
177
|
+
print(f"\n{festival_name}")
|
178
|
+
print(f"公历日期: {date.format_iso()}")
|
179
|
+
|
180
|
+
for lang in languages:
|
181
|
+
set_language(lang)
|
182
|
+
lang_name = Date.get_supported_languages()[lang]
|
183
|
+
print(f" {lang_name}:")
|
184
|
+
print(f" 本地化: {date.format_localized()}")
|
185
|
+
print(f" 星期: {date.format_weekday_localized()}")
|
186
|
+
print(f" 农历: {date.format_lunar()}")
|
187
|
+
|
188
|
+
|
189
|
+
def demo_performance():
|
190
|
+
"""演示性能"""
|
191
|
+
print("\n\n⚡ 性能演示")
|
192
|
+
print("=" * 50)
|
193
|
+
|
194
|
+
import time
|
195
|
+
|
196
|
+
# 农历转换性能
|
197
|
+
start_time = time.time()
|
198
|
+
dates = []
|
199
|
+
for i in range(100):
|
200
|
+
date = Date.from_lunar(2025, 1, i % 29 + 1)
|
201
|
+
dates.append(date)
|
202
|
+
lunar_time = time.time() - start_time
|
203
|
+
print(f"创建100个农历日期: {lunar_time:.4f}秒")
|
204
|
+
|
205
|
+
# 格式化性能
|
206
|
+
start_time = time.time()
|
207
|
+
test_date = Date("20250415")
|
208
|
+
for i in range(1000):
|
209
|
+
formatted = test_date.format_localized()
|
210
|
+
format_time = time.time() - start_time
|
211
|
+
print(f"格式化1000次: {format_time:.4f}秒")
|
212
|
+
|
213
|
+
# 语言切换性能
|
214
|
+
start_time = time.time()
|
215
|
+
languages = ['zh_CN', 'zh_TW', 'ja_JP', 'en_US']
|
216
|
+
for i in range(100):
|
217
|
+
set_language(languages[i % 4])
|
218
|
+
switch_time = time.time() - start_time
|
219
|
+
print(f"语言切换100次: {switch_time:.4f}秒")
|
220
|
+
|
221
|
+
|
222
|
+
if __name__ == "__main__":
|
223
|
+
print("🚀 Staran v1.0.8 新功能完整演示")
|
224
|
+
print("=" * 60)
|
225
|
+
|
226
|
+
try:
|
227
|
+
# 演示农历功能
|
228
|
+
demo_lunar_features()
|
229
|
+
|
230
|
+
# 演示多语言功能
|
231
|
+
demo_multilanguage_features()
|
232
|
+
|
233
|
+
# 演示组合功能
|
234
|
+
demo_combined_features()
|
235
|
+
|
236
|
+
# 演示性能
|
237
|
+
demo_performance()
|
238
|
+
|
239
|
+
print("\n\n✅ 演示完成!")
|
240
|
+
print("=" * 60)
|
241
|
+
print("🌟 主要新功能:")
|
242
|
+
print(" • 农历与公历互转")
|
243
|
+
print(" • 农历日期格式化")
|
244
|
+
print(" • 农历日期比较和判断")
|
245
|
+
print(" • 中简、中繁、日、英四种语言支持")
|
246
|
+
print(" • 全局语言设置")
|
247
|
+
print(" • 单次使用语言覆盖")
|
248
|
+
print(" • 多语言本地化格式")
|
249
|
+
print(" • 120+ API方法,保持向后兼容")
|
250
|
+
|
251
|
+
except Exception as e:
|
252
|
+
print(f"\n❌ 演示过程中出现错误: {e}")
|
253
|
+
import traceback
|
254
|
+
traceback.print_exc()
|
255
|
+
|
256
|
+
# 恢复默认语言
|
257
|
+
set_language('zh_CN')
|