データベース エクスポート ファイルには、バイナリ形式で格納されている日付の列があります。「\x07\xdb\x0c\x01」が再び「01-12-2011」になるように、ファイル内の日付を解凍しようとしています。
16 進数の値が対応する 10 進数にどのように対応するかを知っています。
0x07DB = 2011
0x0C = 12
0x01 = 01
しかし、これらのフォーマットされた日付を適切に解凍するにはどうすればよいでしょうか?
データベース エクスポート ファイルには、バイナリ形式で格納されている日付の列があります。「\x07\xdb\x0c\x01」が再び「01-12-2011」になるように、ファイル内の日付を解凍しようとしています。
16 進数の値が対応する 10 進数にどのように対応するかを知っています。
0x07DB = 2011
0x0C = 12
0x01 = 01
しかし、これらのフォーマットされた日付を適切に解凍するにはどうすればよいでしょうか?
struct
モジュールを使用して、これらの値を整数のタプルにアンパックします。
import struct
year, month, day = struct.unpack('>HBB', "\x07\xdb\x0c\x01")
>HBB
フォーマット指定子は、struct
リトル エンディアン形式の 3 つの値、1 つの unsigned short (整数として読み取られる 2 バイト値) と unsigned chars (整数として読み取られる 1 バイト値) を期待するように指示します。
必要に応じて、これらを渡しdatetime.date()
て日付オブジェクトを作成できます。
from datetime import date
import struct
somedate = date(*struct.unpack('>HBB', "\x07\xdb\x0c\x01"))
デモ:
>>> import struct
>>> from datetime import date
>>> date(*struct.unpack('>HBB', "\x07\xdb\x0c\x01"))
datetime.date(2011, 12, 1)
または、文字列の書式設定を使用できます。
>>> '{2:02d}-{1:02d}-{0}'.format(*struct.unpack('>HBB', "\x07\xdb\x0c\x01"))
'01-12-2011'
その日付を表す文字列を作成します。