# 1154.一年中的第几天

[原题](https://leetcode-cn.com/problems/day-of-the-year/)

重点就是计算从年初当前月份，有几个闰月、30天的月、是否包括2月，以及2月时是否闰年

```python
class Solution:
    def dayOfYear(self, date: str) -> int:
        s = date.split('-')
        y, m, d = int(s[0]), int(s[1]), int(s[2])
	    # 闰月集合
        set_31_day = set([1, 3, 5, 7, 8, 10, 12])
        day_31 = 0	#闰月个数
        day_30 = 0	#30天的月分个数

        for i in range(m):
            if i in set_31_day:
                day_31 += 1		#看年初到当前月份有几个闰月
        # 注意月份从1开始
        if m == 1:
            return d
        elif m == 2:
            return 31 + d
        if m > 2:
            day_30 = (m - 1) - 1 - day_31	#注意还要减去2月，要单独讨论

            if (y % 4 == 0) and (y % 100 != 0) or (y % 400 == 0):	#闰年2月有29天
                return day_31 * 31 + day_30 * 30 + 29 + d
            else:	#非闰年28天
                return day_31 * 31 + day_30 * 30 + 28 + d
```
