首页 文章

如何生成偶数日历日期?

提问于
浏览
0

有没有人知道如何在2018年到2021年的“偶数天”,月份和年份的python(或其他平台)的日历中生成列表?

例:

Sun, 02 Jan 2019
Tue, 04 Jan 2019
Thur, 06 Jan 2019
Sat, 08 Jan 2019
Sun, 10 Jan 2019
Tue, 12 Jan 2019
Thur, 14 Jan 2019
Sat, 16 Jan 2019
Sun, 18 Jan 2019
Tue, 20 Jan 2019
Thur, 22 Jan 2019

依此类推,直到2021年为止 .

编辑:

如何在python中生成2018年到2022年之间的2种格式的日历列表:

星期几,日期月份年份时间(小时:分钟:秒) - 年 - 月 - 日期时间(小时:分钟:秒)

注意:日期:仅对等日期计划:随机生成的计划

例:

Tue, 02 Jan 2018 00:59:23  -   2018-01-02  00:59:23
Thu, 04 Jan 2018 10:24:52  -   2018-01-04  10:24:52
Sat, 06 Jan 2018 04:11:09  -   2018-01-06  04:11:09
Mon, 08 Jan 2018 16:12:40  -   2018-01-08  16:12:40
Wed, 10 Jan 2018 10:08:15  -   2018-01-10  10:08:15
Fri, 12 Jan 2018 07:10:09  -   2018-01-12  07:10:09
Sun, 14 Jan 2018 11:50:10  -   2018-01-14  11:50:10
Tue, 16 Jan 2018 02:29:22  -   2018-01-16  02:29:22
Thu, 18 Jan 2018 19:07:20  -   2018-01-18  19:07:20
Sat, 20 Jan 2018 08:50:13  -   2018-01-20  08:50:13
Mon, 22 Jan 2018 02:40:02  -   2018-01-22  02:40:02

等等,直到2022年......

2 回答

  • 1

    这里有一些相当简单的东西似乎可以工作并处理闰年:

    from calendar import isleap
    from datetime import date
    
    # Days in each month (1-12).
    MDAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    def dim(year, month):
        """ Number of days in month of the given year. """
        return MDAYS[month] + ((month == 2) and isleap(year))
    
    start_year, end_year = 2018, 2021
    
    for year in range(start_year, end_year+1):
        for month in range(1, 12+1):
            days = dim(year, month)
            for day in range(1, days+1):
                if day % 2 == 0:
                    dt = date(year, month, day)
                    print(dt.strftime('%a, %d %b %Y'))
    

    输出:

    Tue, 02 Jan 2018
    Thu, 04 Jan 2018
    Sat, 06 Jan 2018
    Mon, 08 Jan 2018
    Wed, 10 Jan 2018
    Fri, 12 Jan 2018
    Sun, 14 Jan 2018
    Tue, 16 Jan 2018
    ...
    

    Edit:

    这是一种方法(我认为)你在后续问题中提出了如何做的事情:

    from calendar import isleap
    from datetime import date, datetime, time
    from random import randrange
    
    # Days in each month (1-12).
    MDAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
    
    def dim(year, month):
        """ Number of days in month of the given year. """
        return MDAYS[month] + ((month == 2) and isleap(year))
    
    def whenever():
        """ Gets the time value. """
        # Currently just returns a randomly selected time of day.
        return time(*map(randrange, (24, 60, 60)))  # hour:minute:second
    
    start_year, end_year = 2018, 2021
    
    for year in range(start_year, end_year+1):
        for month in range(1, 12+1):
            days = dim(year, month)
            for day in range(1, days+1):
                if day % 2 == 0:
                    dt, when = date(year, month, day), whenever()
                    dttm = datetime.combine(dt, when)
                    print(dt.strftime('%a, %d %b %Y'), when, '-', dttm)
    

    输出:

    Tue, 02 Jan 2018 00:54:02 - 2018-01-02 00:54:02
    Thu, 04 Jan 2018 10:19:51 - 2018-01-04 10:19:51
    Sat, 06 Jan 2018 22:48:09 - 2018-01-06 22:48:09
    Mon, 08 Jan 2018 06:48:46 - 2018-01-08 06:48:46
    Wed, 10 Jan 2018 14:01:54 - 2018-01-10 14:01:54
    Fri, 12 Jan 2018 05:42:43 - 2018-01-12 05:42:43
    Sun, 14 Jan 2018 21:42:37 - 2018-01-14 21:42:37
    Tue, 16 Jan 2018 08:08:39 - 2018-01-16 08:08:39
    ...
    
  • 0

    关于什么:

    import datetime
    
    d = datetime.date.today()                       # Define Start date
    while d.year <= 2021:                           # This will go *through* 2012
            if d.day % 2 == 0:                      # Print if even date
                    print(d.strftime('%a, %d %b %Y'))
            d += datetime.timedelta(days=1)         # Jump forward a day
    
    Wed, 31 Oct 2018
    Fri, 02 Nov 2018
    Sun, 04 Nov 2018
    Tue, 06 Nov 2018
    Thu, 08 Nov 2018
    Sat, 10 Nov 2018
    Mon, 12 Nov 2018
    Wed, 14 Nov 2018
    Fri, 16 Nov 2018
    Sun, 18 Nov 2018
    Tue, 20 Nov 2018
    Thu, 22 Nov 2018
    ...
    Fri, 24 Dec 2021
    Sun, 26 Dec 2021
    Tue, 28 Dec 2021
    Thu, 30 Dec 2021
    

相关问题