Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

หาวันในปี (Day of the Year) ใน Python


ให้วันที่ในรูปแบบ YYYY-MM-DD ต้องคืนเลขวันในปี (1-366) เช่น 2019-02-10 เป็นวันที่ 41 ของปี

ขั้นตอนการแก้ปัญหา

  1. เตรียมอาร์เรย์จำนวนวันสะสมของแต่ละเดือน: [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
  2. แปลงวันที่เป็น year, month, day
  3. ถ้าปีอธิกสุรทิน (leap year) ให้ปรับเดือนกุมภาพันธ์เป็น 29 วัน
  4. คืนค่า days[month-1] + day

กฎปีอธิกสุรทิน

  • หาร 400 ลงตัว -> อธิกสุรทิน
  • หาร 4 ลงตัว แต่หาร 100 ไม่ลงตัว -> อธิกสุรทิน
  • ที่เหลือ -> ไม่อธิกสุรทิน

ตัวอย่างโค้ด

class Solution(object):
    def dayOfYear(self, date):
        days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        d = list(map(int, date.split("-")))
        if d[0] % 400 == 0:
            days[2] += 1
        elif d[0] % 4 == 0 and d[0] % 100 != 0:
            days[2] += 1
        for i in range(1, len(days)):
            days[i] += days[i-1]
        return days[d[1]-1] + d[2]

ob1 = Solution()
print(ob1.dayOfYear("2019-02-10"))

อินพุต

"2019-02-10"

เอาต์พุต

41

วิธีแก้แบบ Pythonic (ใช้ datetime)

from datetime import datetime

def dayOfYear(date):
    dt = datetime.strptime(date, "%Y-%m-%d")
    return dt.timetuple().tm_yday

# หรือ manual แบบสั้น
def dayOfYear(date):
    y, m, d = map(int, date.split("-"))
    days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    if y % 400 == 0 or (y % 4 == 0 and y % 100 != 0):
        days[2] = 29
    return sum(days[:m]) + d