我使用boto3中的describe_snapshots函数获得以下输出
你' StartTime':datetime.datetime(2017,4,7,4,21,42,tzinfo = tzutc())
我希望将其转换为正确的日期,以便我可以继续对快照进行排序并删除超过特定天数的快照。
是否有可用于实现此功能的python功能?
答案 0 :(得分:1)
这几乎肯定是您需要的格式。 datetime对象很容易比较/可排序。例如:
from datetime import datetime
import boto3
ec2 = boto3.client('ec2')
account_id = 'MY_ACCOUNT_ID'
response = ec2.describe_snapshots(OwnerIds=[account_id])
snapshots = response['Snapshots']
# January 1st, 2017
target_date = datetime(2017, 01, 01)
# Get the snapshots older than the target date
old_snapshots = [s for s in snapshots if s['StartTime'] < target_date]
# Sort the old snapshots
old_snapshots = sorted(old_snapshots, key=lambda s: s['StartTime'])
答案 1 :(得分:1)
这篇文章真的很晚,但我最近遇到了这个问题。我假设您是通过手/眼比较日期与以编程方式比较日期时间对象。或者您正在调试并且只想以人类可读的格式查看 json 对象中的日期/时间。
我发现 aws aha samples 中的转换器运行良好。
def myconverter(json_object):
if isinstance(json_object, datetime.datetime):
return json_object.__str__()
从那里您可以将原始事件/消息从 boto 传递到 json.dump 并返回转换后的 json 字符串
In [34]: print(json_msg)
{'arn': 'arn:aws:service:region::X', 'service': 'SERVICE', 'eventTypeCode': 'SOME_CODE', 'eventTypeCategory': 'CAT', 'eventScopeCode': 'SCOPE', 'region': 'us-east-1', 'startTime': datetime.datetime(YYYY, MM, DD, HH, MM, tzinfo=tzlocal()), 'endTime': datetime.datetime(YYYY, MM, DD, HH, MM, tzinfo=tzlocal()), 'lastUpdatedTime': datetime.datetime(YYYY, MM, DD, HH, MM, SS, tzinfo=tzlocal()), 'statusCode': 'CODE' }
In [35]: json_msg = json.dumps(json_event, default=myconverter)
In [36]: print(json_event)
{'arn': 'arn:aws:service:region::X', 'service': 'SERVICE', 'eventTypeCode': 'SOME_CODE', 'eventTypeCategory': 'CAT', 'eventScopeCode': 'SCOPE', 'region': 'us-east-1', 'startTime': "YYYY-MM-DD HH:MM:SS-OH:OS", 'endTime': "YYYY-MM-DD HH:MM:SS-OH:OS", 'lastUpdatedTime': "YYYY-MM-DD HH:MM:SS-OH:OS" , 'statusCode': 'CODE' }
答案 2 :(得分:-2)
可能需要更多来自您的代码 - 但看起来您似乎是以这种方式输出的代码(或者您默认使用的代码)
aws返回以下格式:
<startTime>YYYY-MM-DDTHH:MM:SS.SSSZ</startTime>
所以我猜你是在某个地方使用datetime.datetime()而不是日期字段上的其他东西? (https://docs.python.org/2/library/datetime.html)