我有以下方法:
# last_updated is a datetime() object, representing the last time this program ran
def time_diff(last_updated):
day_period = last_updated.replace(day=last_updated.day + 1,
hour=1,
minute=0,
second=0,
microsecond=0)
delta_time = day_period - last_updated
hours = delta_time.seconds // 3600
# make sure a period of 24hrs have passed before shuffling
if hours >= 24:
print "hello"
else:
print "do nothing"
Run Code Online (Sandbox Code Playgroud)
我想知道从那以后24小时过去了last_updated,我怎么能这样做last_updated呢?
我正在尝试datetime.datetime使用一些额外的方法来扩展Python的类.所以,例如我在做:
import datetime
class DateTime(datetime.datetime):
def millisecond(self):
return self.microsecond/1000
Run Code Online (Sandbox Code Playgroud)
但是如果我这样做的话
>>> d = DateTime(2010, 07, 11, microsecond=3000)
>>> print d.millisecond()
3
>>> delta = datetime.timedelta(hours=4)
>>> newd = d + delta
>>> print newd.millisecond()
AttributeError: 'datetime.datetime' object has no attribute 'millisecond'
Run Code Online (Sandbox Code Playgroud)
这显然是因为d + delta调用datetime.datetime.__add__()返回datetime.datetime对象的方法.
有什么办法可以让这个datetime.datetime对象转换成一个DateTime对象吗?或者我是否必须重新实现DateTime子类中的所有运算符才能返回正确的类型?
我从EC2实例中提取launch_time,它返回一个unicode字符串,如下所示:
2014-12-22T08:46:10.000Z
我使用dateutil解析器将其转换为datetime
launch_time = parser.parse(instance.launch_time)
Run Code Online (Sandbox Code Playgroud)
所以我转换后的午餐时间如下:
2014-12-22 08:46:10 + 00:00
我想将此启动时间与当前时间进行比较,以了解此实例运行了多长时间.
我得到current_time:
current_time = datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)
我这样得到它:
2014-12-22 11:46:10.527010
现在我有两个时间戳,我有这个功能
def timeDiff(launch_time, current_time):
running_time = current_time - launch_time
return running_time.seconds/60
Run Code Online (Sandbox Code Playgroud)
我预计结果将是180分钟(3小时).但我得到了这个错误:
TypeError:无法减去offset-naive和offset-aware datetimes
我认为这两个时间戳之间存在明显差异.我需要准确比较日期和时间,看看它运行了多长时间.我找不到合适的方法来解决这个问题.任何想法赞赏!