这篇文章主要围绕如何在Python中将datetime.timedelta转换为分钟和小时?和pythondatetime转time展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何在Pytho
这篇文章主要围绕如何在Python中将datetime.timedelta转换为分钟和小时?和python datetime转time展开,旨在为您提供一份详细的参考资料。我们将全面介绍如何在Python中将datetime.timedelta转换为分钟和小时?的优缺点,解答python datetime转time的相关问题,同时也会为您带来python datetime.timedelta进入列表、python – datetime和timedelta、python – 从Datetime操作创建TimeDeltas的pandas错误、python – 如何将字符串转换为datetime.timedelta()?的实用方法。
本文目录一览:- 如何在Python中将datetime.timedelta转换为分钟和小时?(python datetime转time)
- python datetime.timedelta进入列表
- python – datetime和timedelta
- python – 从Datetime操作创建TimeDeltas的pandas错误
- python – 如何将字符串转换为datetime.timedelta()?
如何在Python中将datetime.timedelta转换为分钟和小时?(python datetime转time)
如何解决如何在Python中将datetime.timedelta转换为分钟和小时??
没有用于timedelta
对象的内置格式化程序,但是你自己可以很容易地做到这一点:
days, seconds = duration.days, duration.seconds
hours = days * 24 + seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
或者,等效地,如果你使用的是Python 2.7+或3.2+:
seconds = duration.total_seconds()
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = seconds % 60
现在,你可以根据需要打印它:
''{} minutes, {} hours''.format(minutes, hours)
例如:
def convert_timedelta(duration):
days, seconds = duration.days, duration.seconds
hours = days * 24 + seconds // 3600
minutes = (seconds % 3600) // 60
seconds = (seconds % 60)
return hours, minutes, seconds
td = datetime.timedelta(2, 7743, 12345)
hours, minutes, seconds = convert_timedelta(td)
print ''{} minutes, {} hours''.format(minutes, hours)
这将打印:
9 minutes, 50 hours
如果要获取“ 10分钟1小时”而不是“ 10分钟1小时”,则也需要手动执行此操作:
print ''{} minute{}, {} hour{}''.format(minutes, ''s'' if minutes != 1 else '''',
hours, ''s'' if minutes != 1 else '''')
或者,你可能想编写一个english_plural函数’s’为你完成这些操作,而不是重复自己。
从你的评论看来,你实际上是想让日子分开。这甚至更容易:
def convert_timedelta(duration):
days, seconds = duration.days, duration.seconds
hours = seconds // 3600
minutes = (seconds % 3600) // 60
seconds = (seconds % 60)
return days, hours, minutes, seconds
如果要将其转换为单个值以存储在数据库中,然后将该单个值转换回以对其进行格式化,请执行以下操作:
def dhms_to_seconds(days, hours, minutes, seconds):
return (((days * 24) + hours) * 60 + minutes) * 60 + seconds
def seconds_to_dhms(seconds):
days = seconds // (3600 * 24)
hours = (seconds // 3600) % 24
minutes = (seconds // 60) % 60
seconds = seconds % 60
return days, hours, minutes, seconds
因此,将其放在一起:
def store_timedelta_in_database(thingy, duration):
seconds = dhms_to_seconds(*convert_timedelta(duration))
db.execute(''INSERT INTO foo (thingy, duration) VALUES (?, ?)'',
thingy, seconds)
db.commit()
def print_timedelta_from_database(thingy):
cur = db.execute(''SELECT duration FROM foo WHERE thingy = ?'', thingy)
seconds = int(cur.fetchone()[0])
days, hours, minutes, seconds = seconds_to_dhms(seconds)
print ''{} took {} minutes, {} hours, {} days''.format(thingy, minutes, hours, days)
解决方法
我得到这样的开始日期:
from django.utils.timezone import utc
import datetime
start_date = datetime.datetime.utcnow().replace(tzinfo=utc)
end_date = datetime.datetime.utcnow().replace(tzinfo=utc)
duration = end_date - start_date
我得到这样的输出:
datetime.timedelta(0,5,41038)
如何将其转换为正常时间,如下所示?
10分钟1个小时是这样的
python datetime.timedelta进入列表
就像我在评论中写道的那样,您必须转换datetime.timedelta对象:
import datetime
new_time = datetime.time(minute=7)
print(new_time)
# >> 00:07:00
print(type(new_time))
# >> <class 'datetime.time'>
new_time_list: list = [new_time]
print(new_time_list)
# >> ['00:07:00']
print(type(new_time_list[0]))
# >> <class 'datetime.time'>
new_time_list: list = [str(new_time)]
print(new_time_list)
# >> ['00:07:00']
print(type(new_time_list[0]))
# >> <class 'str'>
new_time_list = [new_time.isoformat()]
print(new_time_list)
# >> ['00:07:00']
print(type(new_time_list[0]))
# >> <class 'str'>
输入您的代码
from datetime import datetime
list_dt_obj: list = []
list_str: list = []
date_now = datetime.now()
now = date_now.strftime("%H:%M")
timeB = datetime.strptime(now,"%H:%M")
temps_arret_aller = ["00:00","00:07","00:14","00:21"]
for temp in temps_arret_aller:
timeA = datetime.strptime(temp,"%H:%M")
newTime = timeA - timeB
print(newTime) # print datetime.timedelta obj: output as string
list_dt_obj.append(newTime) # add datetime.timedelta obj
list_str.append(str(newTime)) # toString
print(list_dt_obj) # list of datetime.timedelta obj
print(list_str) # list of strings
# output:
# -1 day,10:19:00
# -1 day,10:26:00
# -1 day,10:33:00
# -1 day,10:40:00
# [datetime.timedelta(-1,37140),datetime.timedelta(-1,37560),37980),38400)]
# ['-1 day,10:19:00','-1 day,10:26:00',10:33:00',10:40:00']
,
打印项目时,将在该项目上调用.__str__()
。当您打印容器时,.__repr__()
会在容器中的每个项目上被调用。
import datetime
time_delta = datetime.timedelta(seconds=1000)
print(time_delta) # 0:16:40
print(time_delta.__str__()) # 0:16:40
print(time_delta.__repr__()) # datetime.timedelta(seconds=1000)
my_list = [time_delta,time_delta]
print(my_list) # [datetime.timedelta(seconds=1000),datetime.timedelta(seconds=1000)]
print([str(delta) for delta in my_list]) # ['0:16:40','0:16:40']
从最后一行可以看到,您可以手动调用容器中每个项目的str()
来获取所需的内容。
python – datetime和timedelta
我的时区是UTC 5.
所以,当我做datetime.datetime.Now()时,它给出:
2012-07-14 06:11:47.318000
#note its 6AM
我想从它减去5个小时,以便它等于datetime.datetime.utcNow()所以我做了:
import time
from datetime import datetime,timedelta
dt = datetime.Now() - timedelta(hours=time.timezone/60/60)
print dt
#gives 2012-07-14 11:11:47.319000
"""
Here 11 is not the PM its AM i double check it by doing
print dt.strftime('%H:%M:%s %p')
#gives 11:11:47 AM
"""
你看到它不是减去5小时而是在日期时间增加5小时?
我在这里做错了吗?
>>> import time
>>> time.timezone
-36000
在这里,我是UTC 10,所以你的代码变成了:
>>> from datetime import timedelta
>>> print timedelta(hours=time.timezone/60/60)
-1 day,14:00:00
python – 从Datetime操作创建TimeDeltas的pandas错误
我正在使用Pandas版本0.16.2.我在Pandas数据帧中有几个列,dtype为datetime64 [ns]:
In [6]: date_list = ["SubmittedDate","PolicyStartDate","PaidUpDate","maturityDate","DraftDate","CurrentValuationDate","dob","InForceDate"] In [11]: data[date_list].head() Out[11]: SubmittedDate PolicyStartDate PaidUpDate maturityDate DraftDate \ 0 NaT 2002-11-18 NaT 2041-03-04 NaT 1 NaT 2015-01-13 NaT NaT NaT 2 NaT 2014-10-15 NaT NaT NaT 3 NaT 2009-08-27 NaT NaT NaT 4 NaT 2007-04-19 NaT 2013-10-01 NaT CurrentValuationDate dob InForceDate 0 2015-04-30 1976-03-04 2002-11-18 1 NaT 1949-09-27 2015-01-13 2 NaT 1947-06-15 2014-10-15 3 2015-07-30 1960-06-07 2009-08-27 4 2010-04-21 1950-10-01 2007-04-19
这些最初是字符串格式(例如’1976-03-04′),我使用以下方法转换为datetime对象:
In [7]: for datecol in date_list: ...: data[datecol] = pd.to_datetime(data[datecol],coerce=True,errors = ''raise'')
以下是每个列的dtypes:
In [8]: for datecol in date_list: print data[datecol].dtypes
收益:
datetime64[ns] datetime64[ns] datetime64[ns] datetime64[ns] datetime64[ns] datetime64[ns] datetime64[ns] datetime64[ns]
到现在为止还挺好.但我想要做的是为每个列创建一个新列,从特定日期开始提供以天为单位的年龄(作为整数).
In [13]: current_date = pd.to_datetime("2015-07-31")
我第一次跑这个:
In [14]: for i in date_list: ....: data[i+"InDays"] = data[i].apply(lambda x: current_date - x)
但是,当我检查返回列的dtype时:
In [15]: for datecol in date_list: ....: print data[datecol + "InDays"].dtypes
我得到这些:
object timedelta64[ns] object timedelta64[ns] object timedelta64[ns] timedelta64[ns] timedelta64[ns]
我不知道为什么他们三个是对象,什么时候应该是timedeltas.我接下来要做的是:
In [16]: for i in date_list: ....: data[i+"InDays"] = data[i+"InDays"].dt.days
这种方法适用于timedelta列.但是,由于其中三列不是timedeltas,我收到此错误:
AttributeError: Can only use .dt accessor with datetimelike values
我怀疑这三列中有一些值阻止Pandas将它们转换为timedeltas.我无法弄清楚如何弄清楚这些价值观可能是什么.
解决方法
您应该在应用部分中添加某种条件,以便在NaT情况下默认为某个时间点.示例 –
for i in date_list: data[i+"InDays"] = data[i].apply(lambda x: current_date - x if x is not pd.NaT else pd.timedelta(0))
或者,如果您不能执行上述操作,则应将条件设置为您想要执行的操作 – data [i“InDays”] = data [i“InDays”].dt.days,仅当系列的dtype允许时才接受它它.
或者更简单的方法来更改应用部分以直接获得您想要的 –
for i in date_list: data[i+"InDays"] = data[i].apply(lambda x: (current_date - x).days if x is not pd.NaT else x)
这会输出 –
In [110]: data Out[110]: SubmittedDate PolicyStartDate PaidUpDate maturityDate DraftDate \ 0 NaT 2002-11-18 NaT 2041-03-04 NaT 1 NaT 2015-01-13 NaT NaT NaT 2 NaT 2014-10-15 NaT NaT NaT 3 NaT 2009-08-27 NaT NaT NaT 4 NaT 2007-04-19 NaT 2013-10-01 NaT CurrentValuationDate dob InForceDate SubmittedDateInDays \ 0 2015-04-30 1976-03-04 2002-11-18 NaT 1 NaT 1949-09-27 2015-01-13 NaT 2 NaT 1947-06-15 2014-10-15 NaT 3 2015-07-30 1960-06-07 2009-08-27 NaT 4 2010-04-21 1950-10-01 2007-04-19 NaT PolicyStartDateInDays PaidUpDateInDays maturityDateInDays DraftDateInDays \ 0 4638 NaT -9348 NaT 1 199 NaT NaN NaT 2 289 NaT NaN NaT 3 2164 NaT NaN NaT 4 3025 NaT 668 NaT CurrentValuationDateInDays dobInDays InForceDateInDays 0 92 14393 4638 1 NaN 24048 199 2 NaN 24883 289 3 1 20142 2164 4 1927 23679 3025
如果您想将NaT更改为NaN,您可以使用 –
for i in date_list: data[i+"InDays"] = data[i].apply(lambda x: (current_date - x).days if x is not pd.NaT else np.NaN)
示例/演示 –
In [114]: for i in date_list: .....: data[i+"InDays"] = data[i].apply(lambda x: (current_date - x).days if x is not pd.NaT else np.NaN) .....: In [115]: data Out[115]: SubmittedDate PolicyStartDate PaidUpDate maturityDate DraftDate \ 0 NaT 2002-11-18 NaT 2041-03-04 NaT 1 NaT 2015-01-13 NaT NaT NaT 2 NaT 2014-10-15 NaT NaT NaT 3 NaT 2009-08-27 NaT NaT NaT 4 NaT 2007-04-19 NaT 2013-10-01 NaT CurrentValuationDate dob InForceDate SubmittedDateInDays \ 0 2015-04-30 1976-03-04 2002-11-18 NaN 1 NaT 1949-09-27 2015-01-13 NaN 2 NaT 1947-06-15 2014-10-15 NaN 3 2015-07-30 1960-06-07 2009-08-27 NaN 4 2010-04-21 1950-10-01 2007-04-19 NaN PolicyStartDateInDays PaidUpDateInDays maturityDateInDays \ 0 4638 NaN -9348 1 199 NaN NaN 2 289 NaN NaN 3 2164 NaN NaN 4 3025 NaN 668 DraftDateInDays CurrentValuationDateInDays dobInDays InForceDateInDays 0 NaN 92 14393 4638 1 NaN NaN 24048 199 2 NaN NaN 24883 289 3 NaN 1 20142 2164 4 NaN 1927 23679 3025
python – 如何将字符串转换为datetime.timedelta()?
我有这个代码:
import datetime date_select = '2011-12-1' delta = datetime.timedelta(days=1) target_date = date_select + delta print target_date
提前致谢 …
解决方法
from datetime import datetime,timedelta date_select = datetime.strptime('2011-12-1','%Y-%m-%d') delta = timedelta(days=1) target_date = date_select + delta print target_date
或者,如果您愿意,不需要…导入…导入行:
import datetime # <- LOOK HERE,same as in your example date_select = datetime.datetime.strptime('2011-12-1','%Y-%m-%d') delta = datetime.timedelta(days=1) target_date = date_select + delta print target_date
今天关于如何在Python中将datetime.timedelta转换为分钟和小时?和python datetime转time的讲解已经结束,谢谢您的阅读,如果想了解更多关于python datetime.timedelta进入列表、python – datetime和timedelta、python – 从Datetime操作创建TimeDeltas的pandas错误、python – 如何将字符串转换为datetime.timedelta()?的相关知识,请在本站搜索。
本文标签: