import tomllib
tomllib.loads("""
[secion]
option = "OPTION"
list = [1, 2, 3]
date = 2022-10-19T00:00:00Z
""")
datetime.UTC¶
datetimeモジュールには、国際標準時(UTC)を表すtimezoneオブジェクト timezone.utc が登録されており、タイムゾーンがUTCの datetime
オブジェクトを作成する場合などに利用できます。
import datetime
datetime.datetime.now(tz=datetime.timezone.utc)
しかし、datetime.timezone.utc
という名前がいまいちでした。いちいちタイプするのは文字数が多くて面倒だし、ソースコードを80カラム以内に収めるのが大変です。
from datetime.timezine import utc
としたいところですが、datetime
はパッケージではないためこれもできません。utc = datetime.timezone.utc
なら書けますが、あまり標準的な使い方とは言えません。
Python3.11では datetime.UTC が追加され、
datetime.datetime.now(tz=datetime.UTC)
と短く書けるようになりました。datetime.UTC
はモジュールのトップレベルに追加されましたので、シンプルに
from datetime import UTC
datetime.datetime.now(tz=UTC)
とも書けます。
datetime.fromisoformat()がタイムゾーン指定 Z をサポート¶
datetime.fromisoformat() は、次のような文字列から datetimeオブジェクト を作成する関数です。
from datetime import datetime
datetime.fromisoformat('2011-11-04T00:05:23+04:00')
datetime.fromisoformat()
は便利な関数でありますが、インターネットで用いられる日付形式 ISO 8601/RFC 3339 のうち、一部しかサポートしていませんでした。
WebアプリケーションなどでJavascriptのDateオブジェクトからJSONを作成する場合、日付文字列は '2022-10-19T10:44:22.153Z'
という形式になります。しかし、この文字列はPython3.10までの datetime
モジュールでは読み込めないため、dateutilパッケージ の dateutil.parser.isoparse など、外部のパッケージを利用する必要がありました。
Python 3.11ではISO 8601の大部分をサポートするようになり、外部のパッケージを使わなくともJSON中の日付文字列をほぼ問題なく datetime
オブジェクトに変換できるようになりました。
datetime.fromisoformat('2022-10-19T10:44:22.153Z')
PEP 682 - 符号付き0のフォーマット指定子¶
Pythonのfloatの値を文字列に変換するとき、値が正の値なら簡単です。
value = 0.000001
print(f"値は {value: 0.2f} です")
しかし、負の値を出力するとき、値が 0
に丸められると
value = -0.000001
print(f"値は {value: 0.2f} です")
と、値は -0.0
となり、負号が出力されてしまいます。Pythonのfloatが準拠するIEEE 754には 負の0 があり、間違いではないのですが、ほとんどの場合このマイナス記号は不必要でしょう。
Python3.11では、floatで使えるフォーマット指定に z
が追加され、負の -0.0
は 正の 0.0
に変換できるようになりました。
value = -0.000001
print(f"値は {value: z0.2f} です")