任何人都可以帮我写出正确的代码。 我正在尝试创建一个字符串元组,其中包含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'
答案 0 :(得分: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中说过,更新了代码以利用它。多亏了他,它现在是一个整洁的四线。
答案 1 :(得分: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的底部,了解哪些字符代码指的是哪种日期格式。