メールの送信日時を抽出してDatetime型として取り扱う方法
メールの送信日時に関する質問です。
Kompira Enterpriseで受信したメールから送信日時を抽出し、Datetime型など、Kompira上で取り扱えるフォーマットに変換する方法をお聞きしたいです。
以下、メール日時抽出スクリプトです。
[mail_text = mail_parse(raw_mail_text)] ->
[
From = mail_text['From'],
Subject = mail_text['Subject'],
Date = mail_text['Date'],#日時情報の抽出
Body = mail_text['Body']
]->
print(Date)
メール送付日時はDate変数に格納し、String型で取得できております。
Thu, 6 Jun 2024 06:52:16 +0000
-
正式なコメント
フィックスポイントの高橋です。
日時を示す文字列を Datetime 型に変換する方法として、まず標準では datetime() 組み込み関数を用いる方法があります。たとえば次のようなジョブフローを作成してみます。
|str = "Thu, 6 Jun 2024 06:52:16 +0000"|
|fmt = "%a, %d %b %Y %H:%M:%S %z"|
[result = datetime(str, fmt)] ->
print(type(result), ':', result)これを実行すると以下のように、Datetime 型に変換できた結果が得られます。
Datetime : 2024-06-06 15:52:16+09:00
ここで、datetime() 関数の第二引数でパースするフォーマットを指定しています。
一方で、メールの Date: ヘッダの形式には利用されているメールソフトなどにより、多少の揺らぎがあると思います。手元でいくつか確認すると末尾に "(UTC)" などのタイムゾーン表記がある場合もあるようです。上記のサンプルですと、そうした表記揺らぎへの対応は弱くなります。
そこで、別の手法として Python ライブラリを用いた変換方法についてもご紹介しておきます。
たとえば、以下のようなライブラリオブジェクトを "lib_email" という名前で作成します。
from email.utils import parsedate_to_datetime
def parsedate(s):
return parsedate_to_datetime(s)このライブラリを用いるように、今度は以下のようなジョブフローを作成してみます(ライブラリオブジェクトはジョブフローと同じディレクトリにある想定です)。
|str = "Thu, 6 Jun 2024 06:52:16 +0000 (UTC)"|
[parsedate = ./lib_email.parsedate] ->
[result = parsedate(str)] ->
print(type(result), ':', result)同様にこれを実行してみると、タイムゾーン表記があっても(なくても)以下のように Datetime 型に変換できていることがわかります。
Datetime : 2024-06-06 06:52:16+09:00
他にも方法はあるかと思いますが、一例として参考になさってみてください。
コメントアクション
サインインしてコメントを残してください。
コメント
1件のコメント