所以我有两个日期时间序号,StartDateOrdinal和EndDateOrdinal,我想用第3步循环这些日期。这很好用,但我注意到a变量返回一个整数而不是一个序数,这是对我来说是个问题,因为我想用datetime.year,.month和.day方法检索这些日期,显然不可能使用整数。
有什么简单的方法吗?通过将整数转换回日期时间对象,或通过其他方式循环日期时间。谢谢!
DateRange = range(StartDateOrdinal, EndDateOrdinal, 3)
for a in DateRange
year = a.year
month = a.month
day = a.day
答案 0 :(得分:1)
那是因为你没有迭代datetime
类型。获得StartDateOrdinal
和EndDateOrdinal
时,它们是整数类型,而不是日期类型类型。例如
import datetime as dt
x = dt.date(2014,12,11)
y = dt.date(2014,12,31)
a = range(x,y,3) # this wont work as range needs integers to be passed
所以你做了
DateRange = range(x.ordinal(),y.ordinal(),3)
在循环内部,将其转换回datetime对象,然后使用这些方法获取月,年和日期
for a in DateRange:
year = dt.date.fromordinal(a).year
month = dt.date.fromordinal(a).month
day = dt.date.fromordinal(a).day
如果您已经拥有序数日期,只需import datetime as dt
并使用循环内的更改
答案 1 :(得分:0)
这里的本质是,当您在各种对象上调用方法时,您可以更改对象的类型。在Python中,所有对象都有与之关联的方法和属性,但每种类型的对象都有不同的方法/属性。
.toordinal()
对象上的datetime
方法返回整数(int
),因此StartDateOrdinal
对象不再是datetime
个对象。
int
没有.fromordinal()
方法。该方法可在datetime库中找到。
这可以解决您的问题:
import datetime
# I am gonna use two sample dates: Jan 1, 2018 and Mar 1, 2018
StartDateOrdinal = datetime.datetime(2018, 1, 1).toordinal()
# produced the int: 736695
EndDateOrdinal = datetime.datetime(2018, 3, 1).toordinal()
# produced the int: 736754
DateRange = range(StartDateOrdinal, EndDateOrdinal, 3)
for a in DateRange:
# convert the integer (int) called a back into a datetime object
date = datetime.datetime.fromordinal(a)
year = date.year
month = date.month
day = date.day
# Let's print the results to ensure we got what we expected...
print(year, month, day)
# outputs...
2018 1 1
2018 1 4
2018 1 7
2018 1 10
... etc