PythonでJSONとdatetimeを扱う方法について説明します。Pythonの標準ライブラリjson.dumpは、辞書型のオブジェクトの内容をそのまま保存できますが、扱えるのは基本型のオブジェクトだけであり、datetimeオブジェクトなど時刻の情報をJSONファイルに保存するときは一度文字列に変換しなければなりません。

datetimeを文字列に変換する

datetimeオブジェクトを文字列に変換するには、strftimeメソッドを使用します。以下に例を示します。

from datetime import datetime

record_time = datetime.now()
obj = {
    'RecordTime': record_time.strftime('%Y%m%d-%H%M%S')
}

このコードでは、現在の日時を取得し、それを'%Y%m%d-%H%M%S'の形式の文字列に変換しています。

文字列をdatetimeに変換する

文字列からdatetimeオブジェクトを生成するには、strptimeメソッドを使用します。以下に例を示します。

from datetime import datetime

obj['RecordTime'] = datetime.strptime(obj['RecordTime'], '%Y%m%d-%H%M%S')

このコードでは、'%Y%m%d-%H%M%S'の形式の文字列をdatetimeオブジェクトに変換しています。

JSONとdatetimeの相互変換

JSONとdatetimeの相互変換を行うには、JSONEncoderを使用します。以下に例を示します。

from json import JSONEncoder
from datetime import datetime

class DatetimeJSONEncoder(JSONEncoder):
    def default(self, o):
        if type(o).__name__ == 'datetime':
            return o.strftime('%Y%m%d-%H%M%S')
        else:
            return o

record = {
    "singleTimestamp": datetime(2019, 1, 29, 19, 29, 2, 234680),
    "listedTimestamps": [
        datetime(2019, 1, 29, 19, 57, 2, 234693),
        datetime(2019, 1, 29, 19, 47, 2, 234695),
        datetime(2019, 1, 29, 19, 37, 2, 234697)
    ],
    "nested": {
        "timestamp": datetime(2019, 1, 29, 19, 31, 2, 234689)
    }
}

with open('jsonencodertest.json', 'w') as fp:
    json.dump(record, fp, indent=2, cls=DatetimeJSONEncoder)

このコードでは、DatetimeJSONEncoderという新しいクラスを定義し、その中のdefaultメソッドでdatetimeオブジェクトを文字列に変換しています。そして、json.dumpメソッドのcls引数にこのクラスを指定することで、JSONとdatetimeの相互変換を行っています。

以上がPythonでJSONとdatetimeを扱う方法です。これらの方法を活用することで、Pythonで日時の情報を効率的に扱うことができます。.

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です