Python метод
Обычно dateutil.parser.parse хорошо работает в этой ситуации, но ему не нравится сложный формат, поэтому процесс заключается в преобразовании его в Сначала похожая на ISO строка, а затем анализ даты:
import pymongo
import pytz
from datetime import datetime
from dateutil import parser
db = pymongo.MongoClient(tz_aware=True)['mydatabase']
db.mycollection.insert_one({"timestamp": "Sat Jun 09 2018 11:58:03 GMT-0400 (EDT)"})
records = db.mycollection.find()
for record in records:
d_str = record.get('timestamp')
if d_str is not None:
naive_str = f'{d_str[0:24]}'
offset = d_str[28:33]
naive_d = datetime.strptime(naive_str, '%a %b %d %Y %H:%M:%S')
iso_str = f'{naive_d.isoformat()}{offset}'
aware_d = parser.parse(iso_str).astimezone(pytz.utc)
db.mycollection.update_one({'_id': record['_id']}, {'$set': {'timestamp': aware_d}})
d = db.mycollection.find_one()
print (d['timestamp'], type(d['timestamp']))
дает:
2018-06-09 15:58:03+00:00 <class 'datetime.datetime'>