2016-08-16 6 views
1

テキストファイルにbsonをダンプしてロードしています。私のdatetimesにタイムゾーン情報が追加されています。タイムゾーン情報を追加したくありません。 D1でPythonでbson.json_util.loadsを使用するときにタイムゾーンを無視する方法は?

import bson, datetime 
d1 = datetime.datetime.now() 
d2 = bson.json_util.loads(bson.json_util.dumps(d1)) 

結果:

datetime.datetime(2016, 8, 16, 14, 38, 41, 984544) 

とd2:

datetime.datetime(2016, 8, 16, 14, 56, 10, 155000, tzinfo=<bson.tz_util.FixedOffset object at 0x1042ca050>) 

この特定のケースでは、私は、タイムゾーンを削除するには

d3 = d2.replace(tzinfo=None) 

を行うことができます。しかし、私は他のタイプの中で時間のある大きなオブジェクトに対してこれをやっています。日時を解析しようとすると、bson.json_util.loadsに常にtzinfo=Noneを設定するよう指示する方法はありますか?

答えて

1

興味深い。 bsonソースは直接object_hookを上書きしますので、カスタムソースを渡すことはできません。 source hereから

def loads(s, *args, **kwargs): 
    """Helper function that wraps :class:`json.loads`. 
    Automatically passes the object_hook for BSON type conversion. 
    """ 
    kwargs['object_hook'] = lambda dct: object_hook(dct) 
    return json.loads(s, *args, **kwargs) 

object_hook内部の)彼らのソースも明示的にあなたが見ている行動の原因となっている、タイムゾーンを設定している:

aware = datetime.datetime.strptime(
      dt, "%Y-%m-%dT%H:%M:%S.%f").replace(tzinfo=utc) 

if not offset or offset == 'Z': 
    # UTC 
    return aware 

私はあなたを考えます」タイムゾーンが設定されていない場合は、タイムゾーンを削除するために結果データセットを別のパスで処理する必要があります。

EDIT:あなたはtz_aware=Falseを渡すことができるようになるJsonOptionsクラスを追加するpending changeがあるように見えます。したがって、Pythonドライバが3.4に更新されるまで待つことができれば、必要な動作を得ることができます。

関連する問題