1

请任何人都可以帮助我编写正确的代码。我正在尝试创建一个字符串元组,其中包含 Microsoft Excel 支持的日期范围内的日期,例如(“2013-Oct-17”、“2100-01-01”)。

我的代码:

import time
import math


DAYS = ("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")
FULL_MONTHS = ("January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December")


mm_ = tuple(str(date) for date in range(2013-oct-17, 2100-01-01))
print mm_

当我运行它时它给了我以下错误(输出):

mm_ = tuple(str(date) for date in range(2013-oct-17, 2100-01-01))
TypeError: unsupported operand type(s) for -: 'int' and 'builtin_function_or_method'
4

2 回答 2

0

使用第三方库dateutil识别不同类型的日期字符串和内置模块datetime。如果不想使用 dateutil,可以尝试使用datetime.datetime.strptime的所有可能格式并使用有效的格式。-timedelta(days=1)如果想要在范围内包含结束日期,可以删除。

from datetime import timedelta
from dateutil.parser import parse
from dateutil.rrule import rrule, DAILY

dates = tuple(str(dt.date()) for dt in rrule(DAILY, dtstart=parse("2013-oct-17"), until=parse("2100-01-01")-timedelta(days=1)))
print dates

更新:小狗 Jon Clements 在关于dateutil.rrule.rrule的评论中说,更新了代码以利用它。多亏了他,它现在是一个整洁的四班轮。

于 2013-10-17T15:42:36.150 回答
0

有许多库可以帮助您解决这个问题。我发现最有用的是熊猫。这是一个片段,演示如何解决您的问题:

In [481]: import pandas as pd

In [482]: dates = pd.date_range('2013-10-17', '2100-01-01')

In [483]: mm_ = tuple(date.strftime('%Y-%m-%d') for date in dates)

In [484]: mm_[:5]
Out[484]: ('2013-10-17', '2013-10-18', '2013-10-19', '2013-10-20', '2013-10-21')

如评论中所述,您必须将日期输入为字符串。如果您想要长格式的日期和月份,您可以使用:

In [486]: nn_ = tuple(date.strftime('%A %B %d, %Y') for date in dates)

In [487]: nn_[:5]
Out[487]: 
('Thursday October 17, 2013',
'Friday October 18, 2013',
'Saturday October 19, 2013',
'Sunday October 20, 2013',
'Monday October 21, 2013')

请参阅http://docs.python.org/2/library/datetime.html的底部以获取哪些字符代码引用哪些日期格式的列表。

于 2013-10-17T15:44:11.983 回答