导入一年的每日日期

qaxu7uf2  于 2021-06-18  发布在  Mysql
关注(0)|答案(4)|浏览(311)

有没有一种简单的方法可以将一个包含给定年份所有日期的列表导入到python文件中?我需要的是将一年中的每一天(01.01.2018---31.12.2018)存储到一个列表中,这样我就可以将这个列表导入sql数据库表中的一列。
我在谷歌上搜索了好几个小时都没找到´找不到任何东西,但应该有一种方法可以直接导入。。。
有人知道吗?谢谢!

vxbzzdmp

vxbzzdmp1#

可以从datetime开始 2018-1-1 并添加一系列 0364/365 天之后:

import datetime

def getDays(year):
    """Generates all days in one year, respecting leap years. Uses Gregorian
    calendarso best keep the year post 1582."""
    def isLeap(y):
        return y%4 == 0 and ( not y % 100 == 0 or y % 400 == 0)

    dt = datetime.date(year,1,1)
    days = 365 + (1 if isLeap(dt.year) else 0) # needs the (..) due to operator precedence

    return (dt + datetime.timedelta(days=k) for k in range( days ) ) 

print(list(getDays(2018)))

输出:

[datetime.date(2018, 1, 1), datetime.date(2018, 1, 2), datetime.date(2018, 1, 3), ..., 
 datetime.date(2018, 12, 29), datetime.date(2018, 12, 30), datetime.date(2018, 12, 31)]

跃迁年份:

for y in [1900,2000]:
    d = list(getDays(y))
    print(d[58:60], d[-1:])

输出:


# 1900 - not a leap yeaer

[datetime.date(1900, 2, 28), datetime.date(1900, 3, 1)] [datetime.date(1900, 12, 31)]

# 2000 - a leap year

[datetime.date(2000, 2, 28), datetime.date(2000, 2, 29)] [datetime.date(2000, 12, 31)]
nimxete2

nimxete22#

这看起来比他要找的要干净一点,而且是一条直线!

import datetime

year = 2018
datelist = [d for d in range(datetime.date(year,12,31)-datetime.date(year,1,1)).days)]

这将导致 datelist 成为一个 list[1, 2, 3, ... 365/366] .
编辑帕特里克的建议,并根据需要更正格式
所有你需要做的是得到你想要的格式将得到从这里解释的数字日期和格式正确。这也可以在一行中完成,但对一些人来说有点多。

datelist = [datetime.fromordinal(date(year, 1, 1).toordinal() + d - 1).strftime("dd.mm.yyyy") for d in range(1,365+ 1 if isLeap(year) else 0))]

分解一下,上面还有很长的路要走:

datelist = []
for d in range(1,365+ 1 if isLeap(year) else 0):
    day = datetime.fromordinal(date(year, 1, 1).toordinal() + d - 1)
    datelist.append(day.strftime("dd.mm.yyyy"))

这将产生如下列表:

["01.01.2018", "02.01.2018", ... "31.12.2018"]
km0tfn4u

km0tfn4u3#

from datetime import date
from datetime import timedelta

# get starting date 01.01.2018

startingDate = date(date.today().year, 1, 1)
currentDate = startingDate
for _ in range(365):
    print(currentDate.strftime('%m.%d.%Y'))
    #get next day
    currentDate = currentDate + timedelta(days=1)
eyh26e7m

eyh26e7m4#

使用sqlite,您可以直接在sql中执行此操作,无需python,这得益于递归CTE:

CREATE TABLE days(day TEXT PRIMARY KEY) WITHOUT ROWID;
INSERT INTO days(day)
  WITH RECURSIVE alldays(day) AS
       (VALUES ('2018-01-01')
        UNION ALL
        SELECT date(day, '+1 day')
        FROM alldays
        LIMIT 366 -- Take leap years into account
       )
  SELECT day FROM alldays WHERE day <= '2018-12-31';
-- List days in October:
SELECT day FROM days WHERE day BETWEEN '2018-10-01' AND '2018-10-31' ORDER BY day;

相关问题