Сравните время запуска экземпляра EC2 и текущего времени в python

Я извлекаю start_time из экземпляра EC2, он возвращает строку юникода, такую ​​как:

2014-12-22T08: 46: 10.000Z

Я использую dateutil parser, чтобы преобразовать его в datetime с

launch_time = parser.parse(instance.launch_time) 

поэтому я получаю lunch_time после преобразования следующим образом:

2014-12-22 08: 46: 10 + 00: 00

И я хочу сравнить это время запуска с текущим временем, чтобы узнать, как долго этот экземпляр работает.

Я получаю current_time с:

 current_time = datetime.datetime.now() 

и я понимаю:

2014-12-22 11: 46: 10.527010

Теперь у меня есть две метки времени, у меня есть эта функция

 def timeDiff(launch_time, current_time): running_time = current_time - launch_time return running_time.seconds/60 

Я ожидаю, что результат составит 180 минут (3 часа). Но я получил эту ошибку:

TypeError: не может вычитать время с наименьшими смещениями и смещением

Я думаю, что есть очевидная разница между этими двумя метками времени. Мне нужно точно сравнить дату и время, чтобы увидеть, как долго он работает. Я не мог найти правильный способ решить эту проблему. Любые мысли оценили!

2 Solutions collect form web for “Сравните время запуска экземпляра EC2 и текущего времени в python”

Вы можете указать часовой пояс, который вы хотите now() как показано ниже:

current_time = datetime.datetime.now(launch_time.tzinfo)

Тогда ваше вычитание должно работать, так как оба времени будут знать о часовом поясе.

Изменить: я должен отметить, что вы можете поместить любой объект часового пояса, который вы хотите в now() и он будет работать нормально. now() преобразует время в любой часовой пояс, который вы проходите. Важная часть состоит в том, чтобы просто убедиться, что если вы добавляете / вычитаете объекты datetime, у них оба имеют временные интервалы (или у них обоих нет временных зон).

 import boto.ec2 from dateutil.parser import * import subprocess import datetime instance_id = subprocess.check_output(['curl', '-s', 'http://169.254.169.254/latest/meta-data/instance-id']) conn = boto.ec2.connect_to_region('ap-southeast-2',aws_access_key_id='Your_Key', aws_secret_access_key='Your_Secret') reservations = conn.get_all_reservations(instance_ids=[instance_id]) for r in reservations: for instance in r.instances: lt_datetime = parse(instance.launch_time) lt_delta = datetime.datetime.now(lt_datetime.tzinfo) - lt_datetime uptime = str(lt_delta) print(uptime) 
Python - лучший язык программирования в мире.