将分钟列表转换为python中的分钟,小时,天和月的列表

时间:2017-07-04 09:47:15

标签: python list

我在几分钟内就有一个大数字列表,我想转换或获取这四个分钟,小时,天和月的列表。举例来说:

Minutes
21601
30
0
90000

结果列表:

Minutes  Hours  Days  Months
1        0      15    0
30       0      0     0
0        0      0     0
0        12     2     2

假设一个月恰好有30天。此外,我知道我在这里将它们显示为简单的列,但这些将是列表 欢呼声,

5 个答案:

答案 0 :(得分:2)

另一种方法是使用datetime.timedelta。

from datetime import datetime, timedelta

d = timedelta(minutes=90000)
print("DAYS:SECONDS")
print("%d:%d" % (d.days, d.seconds))

这会给你:

  

DAYS:SECONDS 62:43200

您始终可以将其转换为您想要的日期格式

答案 1 :(得分:1)

您可以使用以下方法

def format (minutes):
    year = (int) (minutes/(12*30*24*60))
    month = ((int) (minutes/(30*24*60)))%12
    day = ((int) (minutes/(24*60)))%30
    hour = ((int) (minutes/(60)))%24
    min = ((int) (minutes))%60
    return [min,hour,day,month,year]

lis = [21601,30,0,90000]
ans = list(map(lambda x: format(x) , lis))
print(ans)

答案 2 :(得分:1)

您可以将timedelta对象与datetime一起使用。

示例:

from datetime import timedelta, datetime

def convert_from_minutes(minutes):
    td = timedelta(minutes=minutes)
    dt = datetime(1,1,1)
    result = dt + td
    return {
        "days": result.day-1,
        "hours": result.hour,
        "minutes": result.minute,
        "seconds": result.second
    }

ans = convert_from_minutes(21601)
ans["days"]     # gives 15
ans["hours"]    # gives 0
ans["minutes"]  # gives 1
ans["seconds"]  # gives 0

答案 3 :(得分:1)

您可以使用内置函数divmod将分割/余数操作包装成一个:

rem, minutes = zip(*(divmod(x, 60) for x in list_minutes))
rem, hours = zip(*(divmod(x, 24) for x in rem))
months, days = zip(*(divmod(x, 30) for x in rem))

当然,您可以使用datetime.timedelta函数从您的分钟中获取timedelta,但是,这仍然需要一些额外的数学操作才能获得数月和小时。

答案 4 :(得分:0)

好的,我找到了解决办法,但如果这是最好的方式,我不会这样做,但似乎有效:

# list_minutes -is a list of minutes 
minutes=[x % 60 for x in list_minutes]
remeinder1=[x // 60 for x in list_minutes]
hours=[x % 24 for x in remeinder1]
remeinder2=[x // 24 for x in remeinder1]
days=[x % 30 for x in remeinder2]
month=[x % 30 for x in remeinder2]

干杯。