计算今年还剩余多少天
import sys
import logging
from collections import OrderedDict
__author__ = 'thomas'
logging.basicConfig(level='DEBUG')
logger = logging.getLogger('main')
def get_current_days_of_year(year: int, month: int, day: int):
assert 0 < month < 13
assert 0 < day < 32
assert 1800 <= year <= 9999
if year % 400 == 0 or (year % 4 == 0 and year % 100 != 0):
spec_dict = {2: 29}
else:
spec_dict = {2: 28}
min_month = {4, 6, 9, 11}
max_month = [1, 3, 5, 7, 8, 10, 12]
if (month in min_month and day == 31) or (month == 2 and day > spec_dict.get(month)):
raise ValueError('月份:"{}"与日期"{}"不匹配')
min_dict = dict.fromkeys(min_month, 30)
max_dict = dict.fromkeys(max_month, 31)
month_days = OrderedDict(
sorted(min_dict.items() | max_dict.items() | spec_dict.items(),
key=lambda item: item[0])
)
count = 0
for key, value_ in month_days.items():
if month <= key:
break
count += value_
logger.info(count)
count += day
return count
if __name__ == '__main__':
if len(sys.argv) < 2:
logger.error('脚本执行错误,请输入日期参数, 如 "python get_date_days.py 2016/3/30" ')
exit(1)
value = sys.argv[1]
logger.debug(value)
try:
date = [int(num) for num in value.split('/')]
except ValueError:
raise ValueError('日期 "{}" 输入错误,请输入类似于 2016/3/30 这样以斜杆分割的日期'.format(value))
if len(date) != 3:
raise ValueError('日期 "{}" 输入错误,请输入类似于 2016/3/30 这样以斜杆分割的日期'.format(value))
days = get_current_days_of_year(*date)
print('这是今年的第{}天,今年还剩余{}天!'.format(days, 365-days))