Hướng dẫn python nth weekday of month - python ngày thứ sáu trong tháng

Vấn đề với một lớp có nhiều phiếu bầu nhất là nó không hoạt động.one-liner with the most votes is it doesn't work.

Tuy nhiên, nó có thể được sử dụng làm cơ sở để tinh chỉnh:

Bạn thấy đây là những gì bạn nhận được:

c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 7)
for c2 in c:
    print(c2[0])

2018-07-01
2018-07-08
2018-07-15
2018-07-22
2018-07-29

c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
for c2 in c:
    print(c2[0])

2018-07-29
2018-08-05
2018-08-12
2018-08-19
2018-08-26

Nếu bạn nghĩ về nó, nó đang cố gắng tổ chức lịch thành danh sách lồng nhau để in một tuần có giá trị ngày một lần. Vì vậy, Stragglers từ những tháng khác đi vào chơi. Bằng cách sử dụng một danh sách mới các ngày hợp lệ rơi vào tháng - điều này thực hiện thủ thuật.


Trả lời với danh sách được nối thêm

import calendar
import datetime
def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
    #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
    #nth is 1 based... -1. is ok for last.
    i = -1 if nth == -1 or nth == 5 else nth -1
    valid_days = []
    for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
        if d[0].month == mm:
            valid_days.append(d[0])
    return valid_days[i]

Vì vậy, đây là cách nó có thể được gọi là:

firstSundayInJuly2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 7, 1)
firstSundayInAugust2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 8, 1)
print(firstSundayInJuly2018)
print(firstSundayInAugust2018)

Và đây là đầu ra:

2018-07-01 
2018-08-05

2018-07-01
2018-07-08
2018-07-15
2018-07-22
2018-07-29
0 có thể được tái cấu trúc bằng cách sử dụng các biểu thức lambda như vậy:

Trả lời với sự tái cấu trúc biểu hiện Lambda

import calendar
import datetime
def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
    #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
    #nth is 1 based... -1. is ok for last.
    i = -1 if nth == -1 or nth == 5 else nth -1
    return list(filter(lambda x: x.month == mm, \
          list(map(lambda x: x[0], \ 
            calendar.Calendar(dow).monthdatescalendar(yy, mm) \
          )) \
        ))[i]

Cải thiện bài viết

Lưu bài viết

  • Đọc
  • Bàn luận
  • Cải thiện bài viết

    Lưu bài viết

    Đọc

    Bàn luậnĐược đưa ra một chỉ số ngày và ngày trong tuần, nhiệm vụ là viết một chương trình Python để có được ngày cho ngày nhất định trong tuần xảy ra sau ngày nhất định. Chỉ số ngày trong tuần dựa trên bảng dưới đây:
    0 Mục lục
    1 Ngày trong tuần
    2 Thứ hai
    3 Thứ ba
    4 Thứ Tư
    5 thứ năm
    6 Thứ sáu

    Examples:

    Thứ bảy test_date = datetime.datetime(2017, 3, 14), weekday_idx = 4

    Chủ nhật 2017-03-17 

    Đầu vào: test_date = datetime.datetime (2017, 3, 14), weekday_idx = 4 14 March is Tuesday, i.e 1 weekday, 4th weekday is a Friday, i.e 17 March.

    Đầu ra: 2017-03-17 & NBSP; test_date = datetime.datetime(2017, 3, 12), weekday_idx = 5

    Giải thích: 14 tháng 3 là thứ ba, tức là 1 ngày trong tuần, ngày thứ 4 là thứ Sáu, tức là 17 tháng 3. 2017-03-18

    Đầu vào: test_date = datetime.datetime (2017, 3, 12), weekay_idx = 5 12 March is Sunday, i.e 6th weekday, 5th weekday in next week is a Saturday, i.e 18 March.

    Đầu ra: 2017-03-18timedelta() + weekday()

    Giải thích: 12 tháng 3 là Chủ nhật, tức là ngày thứ 6, ngày thứ 5 trong tuần tới là thứ bảy, tức là 18 tháng 3.

    Python3

    Phương thức số 1: Sử dụng TimedelTa () + Day Day ()

    Trong đó, chúng tôi trừ ngày trong tuần từ chỉ số ngày trong tuần và sau đó kiểm tra chỉ số cần thiết được trích xuất, sau đó là ngày cần thiết, nếu âm được tính tổng với 7 và sau đó số kết quả được thêm vào ngày hiện tại bằng thời gian sử dụng Timedelta ().

    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    1
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    2

    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    3
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    5
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    6
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    7
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    8
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    7
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    0
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    1

    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    2
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    3
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    4
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    5
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    6
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    7
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    8
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    9

    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    0
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    2

    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    3
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    0
    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    6
    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    7

    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    8
    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    9
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    1
    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    2

    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    2
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    3
    firstSundayInJuly2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 7, 1)
    firstSundayInAugust2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 8, 1)
    print(firstSundayInJuly2018)
    print(firstSundayInAugust2018)
    
    5
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    5
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    6
    firstSundayInJuly2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 7, 1)
    firstSundayInAugust2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 8, 1)
    print(firstSundayInJuly2018)
    print(firstSundayInAugust2018)
    
    8
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    8
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    9

    Output:

    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17

    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    3
    2018-07-29
    2018-08-05
    2018-08-12
    2018-08-19
    2018-08-26
    
    3
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    5
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    7
    lambda function

    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    8
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    3
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    5
    firstSundayInJuly2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 7, 1)
    firstSundayInAugust2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 8, 1)
    print(firstSundayInJuly2018)
    print(firstSundayInAugust2018)
    
    2

    Python3

    Phương thức số 1: Sử dụng TimedelTa () + Day Day ()

    Trong đó, chúng tôi trừ ngày trong tuần từ chỉ số ngày trong tuần và sau đó kiểm tra chỉ số cần thiết được trích xuất, sau đó là ngày cần thiết, nếu âm được tính tổng với 7 và sau đó số kết quả được thêm vào ngày hiện tại bằng thời gian sử dụng Timedelta ().

    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    1
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    2

    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    3
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    5
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    6
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    7
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    8
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    7
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    0
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    1

    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17
    3
    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17
    4
    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17
    5
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    3
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    5
    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17
    8

    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    3
    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17
    0
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17
    2___

    import calendar
    import datetime
    def get_nth_DOW_for_YY_MM(dow, yy, mm, nth) -> datetime.date:
        #dow - Python Cal - 6 Sun 0 Mon ...  5 Sat
        #nth is 1 based... -1. is ok for last.
        i = -1 if nth == -1 or nth == 5 else nth -1
        valid_days = []
        for d in calendar.Calendar(dow).monthdatescalendar(yy, mm):
            if d[0].month == mm:
                valid_days.append(d[0])
        return valid_days[i]
    
    8
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    4
    2018-07-01
    2018-07-08
    2018-07-15
    2018-07-22
    2018-07-29
    
    03

    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    2
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    3
    firstSundayInJuly2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 7, 1)
    firstSundayInAugust2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 8, 1)
    print(firstSundayInJuly2018)
    print(firstSundayInAugust2018)
    
    5
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    5
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    6
    firstSundayInJuly2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 7, 1)
    firstSundayInAugust2018 = get_nth_DOW_for_YY_MM(calendar.SUNDAY, 2018, 8, 1)
    print(firstSundayInJuly2018)
    print(firstSundayInAugust2018)
    
    8
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    8
    c = calendar.Calendar(calendar.SUNDAY).monthdatescalendar(2018, 8)
    for c2 in c:
        print(c2[0])
    
    9

    Output:

    The original date is : 2017-03-14
    Next date of required weekday : 2017-03-17

    Làm cách nào để sử dụng chức năng trong tuần trong Python?

    Sử dụng phương thức Day () Phương thức Day () trong tuần trả về ngày trong tuần dưới dạng số nguyên, trong đó Thứ Hai là 0 và Chủ nhật là 6. Ví dụ: ngày (2022, 05, 02) là thứ Hai. Vì vậy, số ngày trong tuần của nó là 0. The weekday() method returns the day of the week as an integer, where Monday is 0 and Sunday is 6. For example, the date(2022, 05, 02) is a Monday. So its weekday number is 0.

    Làm thế nào để bạn có được thứ sáu thứ ba của tháng ở Python?

    Đây là một giải pháp trong đó ai đó đã tìm ra nó: Mô-đun tương đối là một phần mở rộng từ gói Python DateUtil (PIP Cài đặt Python-DateUtil).Phần quan trọng ở đây tất nhiên là ngày trong tuần = Relativingelta.fr (3) cho biết chính xác những gì cần thiết: Thứ Sáu thứ ba của tháng.weekday=relativedelta.FR(3) which says exactly what's needed: the third Friday of the month.

    Làm thế nào để bạn có được ngày thứ năm tiếp theo ở Python?

    Làm thế nào để bạn có được ngày tiếp theo trong Python ?..
    Current_date = datetime.ngày giờ.hôm nay().
    Trước_date = DateTime.ngày giờ.Hôm nay () - DateTime.Timedelta (ngày = 1).
    NEXTDAY_DATE = DateTime.ngày giờ.Hôm nay () + DateTime.Timedelta (ngày = 1).

    Làm thế nào để bạn có được vào thứ Sáu tới trong Python?

    Vào thứ sáu, mã này trả về cùng ngày.Để có được tiếp theo, hãy sử dụng (3-Today.weekday ())%7+1.Chỉ là chuyển đổi x%n đến ((x-1)%n) +1.(3-today. weekday())%7+1 . Just the old x%n to ((x-1)%n)+1 conversion.