Int到datetime ordin

2024-04-26 18:38:48 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有两个日期时间顺序,StartDateOrdinal和EndDateOrdinal,我想用步骤3循环这些日期。这很好,但我注意到a变量返回的是整数而不是序数,这对我来说是个问题,因为我想用日期时间.年,.month和.day方法,这显然不可能使用整数。在

有什么简单的方法吗?或者将整数转换回datetime对象,或者以其他方式循环使用datetime。谢谢!在

DateRange = range(StartDateOrdinal, EndDateOrdinal, 3)
for a in DateRange
    year = a.year
    month = a.month
    day = a.day

Tags: 对象方法datetime顺序方式时间步骤整数
2条回答

这里的本质是,当您在各种对象上调用方法时,您可以更改对象的类型。在Python中,所有对象都有与其相关联的方法和属性,但是每种类型的对象都有不同的方法/属性。在

datetime对象上的.toordinal()方法返回整数(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

这是因为您没有迭代datetime类型。当您得到StartDateOrdinalEndDateOrdinal-它们是整数类型而不是日期类型。例如

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

所以你就这么做了

^{pr2}$

在循环中,您将其转换回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并在循环中使用更改

相关问题 更多 >