当减去两个datetime对象时,我理解结果是timedelta对象:
import datetime
AcDepart = 1900-01-01 18:00:00
AcArrival = 1900-01-01 07:00:00
ActualHours = AcDepart - AcArrival
Run Code Online (Sandbox Code Playgroud)
然后我想从中减去两个其他date time对象的总和ActualHours
这是另外两个对象:
HrsEarly = 1900-01-01 02:00:00
HrsLate = 1900-01-01 00:30:00
Run Code Online (Sandbox Code Playgroud)
这是无法完成的等式:
UnCalcTime = ActualHours - (HrsEarly + HrsLate)
Run Code Online (Sandbox Code Playgroud)
这是错误:
UnCalcTime = ActualHours - (HrsEarly + HrsLate)
TypeError: unsupported operand type(s) for +: 'datetime.datetime' and 'datetime.datetime'
Run Code Online (Sandbox Code Playgroud)
所以,我显然不能添加datetime.datetime. 有谁知道我怎么能解决这个问题?可以timedelta加在一起吗?如果是这样,我该如何转换datetime为timedelta?
任何帮助将不胜感激,因为我一直试图解决这个问题很长时间没有成功。
我有一段时间没有Linux,这个时间是hh:mm:sec,但是hh可能超过24小时.所以如果时间是1天12小时,那就是36:00:00.有没有办法采用这种格式并轻松制作时间对象?
我真正想做的是花费所需的时间,即36:00:00,以及它运行4:46:23的时间,并减去两个以获得剩余的时间.我认为时间delta可能是在Python中最方便的方法,但我也愿意接受其他建议.
谢谢.
这有点难以解释,所以如果这没有多大意义,我会道歉.
我有一个程序,我正在做一些调度.其中一个设置是在某些日子每周运行一个任务.例如,每周一,周三和周五.
考虑当前任务安排在1/2/2012(即星期一)的示例,我已经有一堆代码工作到我知道下一个任务运行应该在1/2/2012之后的星期三.我需要做的就是计算周三(2012年1月4日)的实际日期.
我实际上将星期几作为date.weekday()的相应整数,所以在这种情况下我有2代表星期三.
什么是处理这样的事情的最佳方式?我觉得应该有一个相当简单的解决方案,但它不会浮现在脑海中.我正在考虑使用日历对象进行搜索以查找我想要的一周中的某一天,但这似乎有些过分.
我想在本地化日期时间对象中添加或减去周(或天或月或年).问题是,由于夏令时区,天真的方法将导致1小时的班次.
2014-03-27 12:00正好从冬季到夏季转换.如果我添加一个星期的时间值到这个日期本地化在欧洲/柏林时区,结果将是2014-04-03 13:00.我想在2014-04-03 12:00的同一小时.我找到了解决方案:
from datetime import datetime, timedelta
import pytz
my_tz = pytz.timezone("Europe/Berlin")
def add_relativedelta(date, delta):
"""
Adds the given timedelta to the given date. Shifts in timezone offsets
will be removed.
"""
tz = date.tzinfo
result = tz.normalize(date + delta)
if result.utcoffset() != date.utcoffset():
result = tz.normalize(date.utcoffset() - result.utcoffset() + result)
return result
date = my_tz.localize(datetime(year=2014, month=3, day=27, hour=12, minute=0))
print """{} Original localized date (winter time)
{} One week later (summer time)
{} Date one week …Run Code Online (Sandbox Code Playgroud) 我想在给定日期添加一个月
import datetime
dt = datetime.datetime(year=2014, month=5, day=2)
Run Code Online (Sandbox Code Playgroud)
所以我应该得到
datetime.datetime(year=2014, month=6, day=2)
Run Code Online (Sandbox Code Playgroud)
但随着
dt = datetime.datetime(year=2015, month=1, day=31)
Run Code Online (Sandbox Code Playgroud)
我应该得到
datetime.datetime(year=2015, month=3, day=1)
Run Code Online (Sandbox Code Playgroud)
因为没有2015-02-31(而且我希望我的结果在一天之后回合)
有些月份有31天,有些月份有30天,有些是29天,有些是28天!
所以添加一个datetime.timedelta可能不是一个好的做法(因为我们不知道要添加的天数)
我注意到熊猫有一个有趣的概念 DateOffset
http://pandas.pydata.org/pandas-docs/stable/timeseries.html#dateoffset-objects
但我没有找到Month偏移,只是MonthBegin或MonthEnd
我也看到这篇文章 如何使用datetime Python模块计算当前日期六个月的日期?
所以我试过dateutil.relativedelta但是
from dateutil.relativedelta import relativedelta
datetime.datetime(year=2015, month=1, day=31)+relativedelta(months=1)
Run Code Online (Sandbox Code Playgroud)
回报
datetime.datetime(2015, 2, 28, 0, 0)
Run Code Online (Sandbox Code Playgroud)
所以结果在前一天得到了结果.
是否有(干净)的方式来圆天之后?
编辑:我给了一个例子,一个月要添加,但我也希望能够添加例如:2年零6个月(使用一个relativedelta(years=2, months=6))
Good evening chaps,
I would like to write a script where I give python a number of days (let s call it d) and it gives me the date we were d days ago.
I am struggling with the module datetime:
import datetime
tod = datetime.datetime.now()
d = timedelta(days = 50)
a = tod - h
Type Error : unsupported operand type for - : "datetime.timedelta" and
"datetime.datetime"
Run Code Online (Sandbox Code Playgroud)
Thanks for your help
标题说明了一切。我正在编写一个脚本来向 API 发出预定的 GET 请求。我想打印下一次 API 调用的时间,距上一次调用需要 15 分钟。
我非常接近,但一直遇到以下错误: TypeError: a float is required
这是我的代码:
import time, datetime
from datetime import datetime, timedelta
while True:
## create a timestamp for the present moment:
currentTime = datetime.datetime.fromtimestamp(time.time()).strftime("%Y-%m-%d %H:%M:%S")
print "GET request @ " + str(currentTime)
## create a timestamp for 15 minutes into the future:
nextTime = datetime.datetime.now() + datetime.timedelta(minutes = 15)
print "Next request @ " + str(datetime.datetime.fromtimestamp(nextTime).strftime("%Y-%m-%d %H:%M:%S")
print "############################ DONE #############################"
time.sleep(900) ## call the api every …Run Code Online (Sandbox Code Playgroud) 我有一个 Pandas 数据框,其中有 2 列代表开始时间戳和结束时间戳:
start end
2016-06-13 2016-07-20
Run Code Online (Sandbox Code Playgroud)
这些列的数据类型是datetime64[ns].
我现在想创建一个新列,显示月份的差异:
start end duration
2016-06-13 2016-07-20 1.1
Run Code Online (Sandbox Code Playgroud)
我尝试的是执行以下操作:
df['duration'] = df['end'] - df['start']
Run Code Online (Sandbox Code Playgroud)
结果如下:
start end duration
2016-06-13 2016-07-20 37 days 00:00:00.000000000
Run Code Online (Sandbox Code Playgroud)
然后我尝试执行以下操作:
df['duration'] = df['end'] - df['start']).dt.months
Run Code Online (Sandbox Code Playgroud)
但这会产生以下错误
AttributeError:“TimedeltaProperties”对象没有属性“months”
duration该列的数据类型是timedelta64[ns].
我怎样才能达到预期的结果?
我在 pandas 中有一个列dataframe是在减去两次后创建的。我现在有一个timedelta这样的对象-1 days +02:45:00。我只需要删除 -1 天并希望它是02:45:00。有没有办法做到这一点?
我通过减去较早的时间戳为较晚的时间戳得到了这个奇怪的结果:
pd.to_datetime('2021-05-21 06:00:00') - pd.to_datetime('2021-05-21 06:02:00')
Run Code Online (Sandbox Code Playgroud)
输出:
Timedelta('-1 days +23:58:00')
Run Code Online (Sandbox Code Playgroud)
预期输出:
Timedelta('-0 days 00:02:00')
Run Code Online (Sandbox Code Playgroud)
计算负时差的正确方法是什么?谢谢你!