我正在使用python 3.6并且计算日期时遇到了一些问题。
我有一个由日期元素组成的列表,如下所示:
dates = [['2017','01','15'], ['2017','01','14'], ['2017','01','13'],...]
我想按时间格式计算并计算今天的日期。
如何修复我的代码?
以下是我的代码:
dates = [['2017', '01', '15'], ['2017', '01', '14'], ['2017', '01', '13']]
for date in dates:
date_cand = "-".join(date)
date_cand_time = time.strptime(date_cand,"%Y-%m-%d")
(datetime.date.today() - datetime.date(date_cand_time)).days
我现在收到此错误消息:
TypeError: an integer is required (got type time.struct_time)
我希望得到的结果是:
4
5
6
请帮我解决这个问题。
答案 0 :(得分:5)
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/label"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="12dip"
android:layout_marginRight="10dp"
android:layout_alignParentLeft="true"
android:textColor="#ffffff" />
<TextView
android:id="@+id/value"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="12dip"
android:layout_alignParentRight="true"
android:textColor="#ffffff" />
</RelativeLayout>
不是整数,它是带有整数的元组。您不能将其传递给date_cand_time
对象。您必须将前3个元素作为单独的参数传递:
datetime.date()
(datetime.date.today() - datetime.date(*date_cand_time[:3])).days
告诉Python将*
表达式的值应用为单独的参数。
但是,我不会绕道而行lst_reg_date_cand_time[:3]
;只需将3个字符串映射到整数并直接传递它们:
time.strptime()
date_cand = datetime.date(*map(int, date))
(datetime.date.today() - date_cand).days
的论据毕竟是datetime.date()
,year
和month
,与你的字符串顺序相同。
如果您必须使用day
,请使用datetime.datetime.strptime()
并从中提取strptime
对象:
date
演示:
date_cand = datetime.datetime.strptime("-".join(date), "%Y-%m-%d")
(datetime.date.today() - date_cand.date()).days
答案 1 :(得分:4)
此代码似乎有效。请注意,我使用datetime.strptime
代替time.strptime
,以防万一(
from datetime import datetime
def parse_dates(dates_array):
today = datetime.today()
for date_array in dates_array:
date = datetime.strptime('-'.join(date_array), '%Y-%m-%d')
yield (today - date).days
if __name__ == '__main__':
dates = [['2017', '01', '15'], ['2017', '01', '14'], ['2017', '01', '13']]
for days_from_today in parse_dates(dates):
print(days_from_today)
<强>输出强>
4
5
6
<强>买者强>
我在for循环之外移动today
的计算以获得较小的性能优势,但如果您将此代码保留在午夜之后,这将导致代码中断。 :)
答案 2 :(得分:2)
这个Python 2 / Python 3代码是Martijn和Tagc的答案的组合。
from datetime import datetime
def parse_dates(dates_array):
today = datetime.today()
for d in dates_array:
yield (today - datetime(*map(int, d))).days
if __name__ == '__main__':
dates = [
['2017', '01', '15'],
['2017', '01', '14'],
['2017', '01', '13'],
]
for d in parse_dates(dates):
print(d)
<强>输出强>
4
5
6
正如Tagc所说,如果此代码运行时日期可能会发生变化,那么您需要在today = datetime.today()
循环中移动for
。
这里基本上是相同的,没有功能:
from datetime import datetime
dates = [
['2017', '01', '15'],
['2017', '01', '14'],
['2017', '01', '13'],
]
today = datetime.today()
for d in dates:
delta = (today - datetime(*map(int, d))).days
print(delta)
答案 3 :(得分:1)
由于datetime.date在你的代码中用于增量计算,所以这是一种干净的方式来做你想要的。
import datetime
dates = [['2017', '01', '15'], ['2017', '01', '14'], ['2017', '01', '13']]
today = datetime.date.today()
for date in dates:
year,month,day = [int(s) for s in date] #convert to int and assign to vars : year, month, day
date_cand_time = datetime.date(year,month,day) #convert date to datetime.date
delta = (today - date_cand_time).days #calculate the day delta
print delta
输出
4
5
6