diff --git a/.flake8 b/.flake8 new file mode 100644 index 0000000..7da1f96 --- /dev/null +++ b/.flake8 @@ -0,0 +1,2 @@ +[flake8] +max-line-length = 100 diff --git a/.github/workflows/python-app.yml b/.github/workflows/python-app.yml new file mode 100644 index 0000000..997f97b --- /dev/null +++ b/.github/workflows/python-app.yml @@ -0,0 +1,39 @@ +# This workflow will install Python dependencies, run tests and lint with a single version of Python +# For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions + +name: Python application + +on: + push: + branches: + - master + pull_request: + branches: + - master + - dev + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up Python 3.7 + uses: actions/setup-python@v2 + with: + python-version: 3.7 + - name: Install dependencies + run: | + python -m pip install --upgrade pip + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi + - name: Install dependencies for testing + run: | + if [ -f requirements-test.txt ]; then pip install -r requirements-test.txt; fi + - name: Lint with flake8 + run: | + # stop the build if there are Python syntax errors or undefined names + flake8 . --count --show-source --statistics + - name: Test with pytest + run: | + python -m pytest diff --git a/README.md b/README.md index 853a7a1..615dd02 100644 --- a/README.md +++ b/README.md @@ -40,14 +40,14 @@ pip install zhdate --upgrade ```python from zhdate import ZhDate -date1 = ZhDate(2010, 1, 1) # 新建农历 2010年正月初一 的日期对象 +date1 = ZhDate(2010, 1, 1) # 新建农历 2010年正月初一 的日期对象 print(date1) # 直接返回农历日期字符串 dt_date1 = date1.to_datetime() # 农历转换成阳历日期 datetime 类型 dt_date2 = datetime(2010, 2, 6) -date2 = ZhDate.from_datetime(dt_date2) # 从阳历日期转换成农历日期对象 +date2 = ZhDate.from_datetime(dt_date2) # 从阳历日期转换成农历日期对象 -date3 = ZhDate(2020, 4, 30, leap_month=True) # 新建农历 2020年闰4月30日 +date3 = ZhDate(2020, 4, 30, leap_month=True) # 新建农历 2020年闰4月30日 print(date3.to_datetime()) # 支持比较 @@ -55,12 +55,12 @@ if ZhDate(2019, 1, 1) == ZhDate.from_datetime(datetime(2019, 2, 5)): pass # 减法支持 -new_zhdate = ZhDate(2019, 1, 1) - 30 #减整数,得到差额天数的新农历对象 -new_zhdate2 = ZhDate(2019, 1, 1) - ZhDate(2018, 1, 1) #两个zhdate对象相减得到两个农历日期的差额 -new_zhdate3 = ZhDate(2019, 1, 1) - datetime(2019, 1, 1) # 减去阳历日期,得到农历日期和阳历日期之间的天数差额 +new_zhdate = ZhDate(2019, 1, 1) - 30 # 减整数,得到差额天数的新农历对象 +delta1 = ZhDate(2019, 1, 1) - ZhDate(2018, 1, 1) # 两个zhdate对象相减得到两个农历日期的差额 +delta2 = ZhDate(2019, 1, 1) - datetime(2019, 1, 1) # 减去阳历日期,得到农历日期和阳历日期之间的天数差额 # 加法支持 -new_zhdate4 = ZhDate(2019, 1, 1) + 30 # 加整数返回相隔天数以后的新农历对象 +new_zhdate4 = ZhDate(2019, 1, 1) + 30 # 加整数返回相隔天数以后的新农历对象 # 中文输出 new_zhdate5 = ZhDate(2019, 1, 1) diff --git a/requirements-test.txt b/requirements-test.txt new file mode 100644 index 0000000..f5d95a9 --- /dev/null +++ b/requirements-test.txt @@ -0,0 +1,3 @@ +flake8==3.9.0 +importlib-metadata==4.13.0 +pytest==6.0.1 diff --git a/sample_zhdate.py b/sample_zhdate.py index 65b7b7d..f0737f4 100644 --- a/sample_zhdate.py +++ b/sample_zhdate.py @@ -1,15 +1,17 @@ +# -*- coding=utf-8 -*- + from zhdate import ZhDate from datetime import datetime if __name__ == '__main__': - date1 = ZhDate(2010, 1, 1) # 新建农历 2010年正月初一 的日期对象 + date1 = ZhDate(2010, 1, 1) # 新建农历 2010年正月初一 的日期对象 # print(date1) # 直接返回农历日期字符串 - dt_date1 = date1.to_datetime() # 农历转换成阳历日期 datetime 类型 + dt_date1 = date1.to_datetime() # 农历转换成阳历日期 datetime 类型 - dt_date2 = datetime(2010, 2, 6) - date2 = ZhDate.from_datetime(dt_date2) # 从阳历日期转换成农历日期对象 + dt_date2 = datetime(2010, 2, 6) + date2 = ZhDate.from_datetime(dt_date2) # 从阳历日期转换成农历日期对象 - date3 = ZhDate(2020, 4, 29, leap_month=True) # 新建农历 2020年闰4月30日 + date3 = ZhDate(2020, 4, 29, leap_month=True) # 新建农历 2020年闰4月30日 # print(date3.to_datetime()) # 支持比较 @@ -17,12 +19,12 @@ pass # 减法支持 - new_zhdate = ZhDate(2019, 1, 1) - 30 #减整数,得到差额天数的新农历对象 - new_zhdate2 = ZhDate(2019, 1, 1) - ZhDate(2018, 1, 1) #两个zhdate对象相减得到两个农历日期的差额 - new_zhdate3 = ZhDate(2019, 1, 1) - datetime(2019, 1, 1) # 减去阳历日期,得到农历日期和阳历日期之间的天数差额 + new_zhdate = ZhDate(2019, 1, 1) - 30 # 减整数,得到差额天数的新农历对象 + delta1 = ZhDate(2019, 1, 1) - ZhDate(2018, 1, 1) # 两个zhdate对象相减得到两个农历日期的差额 + delta2 = ZhDate(2019, 1, 1) - datetime(2019, 1, 1) # 减去阳历日期,得到农历日期和阳历日期之间的天数差额 # 加法支持 - new_zhdate4 = ZhDate(2019, 1, 1) + 30 # 加整数返回相隔天数以后的新农历对象 + new_zhdate4 = ZhDate(2019, 1, 1) + 30 # 加整数返回相隔天数以后的新农历对象 print(ZhDate(1900, 9, 1, False).chinese()) print(ZhDate.today().chinese()) diff --git a/setup.py b/setup.py index 61fc4d6..ad85af3 100644 --- a/setup.py +++ b/setup.py @@ -1,32 +1,32 @@ -import setuptools +# -*- coding=utf-8 -*- -''' +""" Author : PandaWithBeard Date : 2023-01-21 02:30:41 LastEditors : PandaWithBeard LastEditTime : 2023-01-21 02:30:41 FilePath : /zhdate/setup.py -Description : -''' +Description : +""" + +import setuptools with open('README.md', 'r') as file: long_description = file.read() setuptools.setup( name='zhdate', - version='1.0', + version='1.1', author="PandaWithBeard", author_email="9861649@qq.com", description="A pachage to convert Chinese Lunar Calendar to datetime", long_description=long_description, long_description_content_type="text/markdown", url='https://github.com/CutePandaSh/zhdate', - packages=setuptools.find_packages(), + packages=setuptools.find_packages(exclude=['tests']), classifiers=[ "Programming Language :: Python :: 3", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: OS Independent", ], ) - - \ No newline at end of file diff --git a/test_zhdate.py b/tests/test_zhdate.py similarity index 97% rename from test_zhdate.py rename to tests/test_zhdate.py index 5c65fdd..3a0ad2e 100644 --- a/test_zhdate.py +++ b/tests/test_zhdate.py @@ -1,3 +1,5 @@ +# -*- coding=utf-8 -*- + import unittest from datetime import datetime from zhdate import ZhDate @@ -60,6 +62,7 @@ def test_from_datetime(self): ((1903, 5, 17), datetime(1903, 6, 12)), ((1903, 5, 17, True), datetime(1903, 7, 11)), ((1900, 1, 20), datetime(1900, 2, 19)), + ((1900, 12, 30), datetime(1901, 2, 18)), ((2050, 1, 28), datetime(2050, 2, 19)), ((2050, 3, 30, True), datetime(2050, 5, 20)), ((1900, 1, 1), datetime(1900, 1, 31)), @@ -95,4 +98,4 @@ def test_validate(self): ] for case in test_cases: - self.assertEqual(ZhDate.validate(*case[0]), case[1]) \ No newline at end of file + self.assertEqual(ZhDate.validate(*case[0]), case[1]) diff --git a/zhdate/__init__.py b/zhdate/__init__.py index 6ae5df6..fe16686 100644 --- a/zhdate/__init__.py +++ b/zhdate/__init__.py @@ -1,17 +1,17 @@ -''' --*- coding: utf-8 -*- +# -*- coding: utf-8 -*- + +""" File: zhdate.py File Created: Sunday, 17th February 2019 4:58:02 pm Author: Wang, Yi (denniswangyi@gmail.com) -''' -''' +----- changed: Saturday, 21st January 2023 by: Eilles Wan (EillesWan@outlook.com) -''' -''' +----- changed: Tuesday, 14th March 2023 by: JellyBeanXiewh (https://github.com/JellyBeanXiewh) -''' +""" + from datetime import datetime, timedelta from itertools import accumulate @@ -60,10 +60,12 @@ def from_datetime(cls, dt): ZhDate -- 生成的农历日期对象 """ lunar_year = dt.year - # 如果还没有到农历正月初一 农历年份减去1 - lunar_year -= (datetime.strptime(CHINESENEWYEAR[lunar_year - 1900], '%Y%m%d') - dt).total_seconds() > 0 # 当时农历新年时的日期对象 - newyear_dt = datetime.strptime(CHINESENEWYEAR[lunar_year - 1900], '%Y%m%d') + newyear_dt = datetime.strptime(CHINESENEWYEAR[lunar_year-1900], '%Y%m%d') + # 如果还没有到农历正月初一 农历年份减去1 + lunar_year -= (newyear_dt - dt).total_seconds() > 0 + # 更正当时农历新年时的日期对象 + newyear_dt = datetime.strptime(CHINESENEWYEAR[lunar_year-1900], '%Y%m%d') # 查询日期距离当年的春节差了多久 days_passed = (dt - newyear_dt).days # 被查询日期的年份码 @@ -71,6 +73,8 @@ def from_datetime(cls, dt): # 取得本年的月份列表 month_days = cls.decode(year_code) + month = 0 + lunar_day = 0 for pos, days in enumerate(accumulate(month_days)): if days_passed + 1 <= days: month = pos + 1 @@ -162,7 +166,11 @@ def __str__(self): Returns: str -- 标准格式农历日期字符串 """ - return "农历{}年{}{}月{}日".format(self.lunar_year, "闰" if self.leap_month else "", self.lunar_month, self.lunar_day) + return "农历{}年{}{}月{}日".format( + self.lunar_year, "闰" if self.leap_month else "", + self.lunar_month, + self.lunar_day + ) def __repr__(self): return self.__str__() diff --git a/zhdate/constants.py b/zhdate/constants.py index 4df7f92..f74c8ad 100644 --- a/zhdate/constants.py +++ b/zhdate/constants.py @@ -1,9 +1,10 @@ -''' --*- coding: utf-8 -*- +# -*- coding: utf-8 -*- + +""" File: constant.py File Created: Saturday, 21st January 2023 01:42 am Author: Eilles Wan (EillesWan@outlook.com) -''' +""" CHINESEYEARCODE = [ 19416, @@ -41,7 +42,7 @@ 最后四位:表示闰月的月份,0表示当年无闰月 前四位和最后四位应该结合使用,如果最后四位为0,则不考虑前四位 -例: +例: 1901年代码为 19168,转成二进制为 0b100101011100000, 最后四位为0,当年无闰月,月份数据为 010010101110 分别代表12月的大小情况 1903年代码为 21717,转成二进制为 0b101010011010101,最后四位为5,当年为闰五月,首四位为0,闰月为29天,月份数据为 010101001101 分别代表12月的大小情况 @@ -93,4 +94,3 @@ ''' 从1900年,至2100年每年的农历春节的公历日期 ''' -