状況
ログの時刻を UTC でそろえる方法を AI アシスタントに聞いた。環境は Python 3.12。
Python でタイムゾーンつきの UTC の現在時刻を取るには?
datetime.utcnow() を使えば、タイムゾーン情報つきの UTC 時刻が得られます。最新の推奨される書き方です。
② の説明の誤りは?
正答
- utcnow() はタイムゾーン情報の無い値を返し、3.12 で非推奨になった
- utcnow() は UTC ではなく、OS に設定された日本時間を返す
- utcnow() は Python 3.0 で削除されたので、呼ぶとエラーになる
- utcnow() は秒までしか持たず、ミリ秒以下が切り捨てられる
解説
datetime.utcnow() は UTC の時刻を返すが、タイムゾーン情報(tzinfo)を持たない naive な値で、ほかの処理からはローカル時刻と区別がつかない。Python 3.12 で非推奨になり、公式ドキュメントは datetime.now() に UTC を渡す書き方(datetime.now(timezone.utc)。3.11 以降は datetime.UTC も同じ)を勧めている。AI は昔のコードに多い書き方を「最新の推奨」と言い切ることがある。値そのものは UTC なので「日本時間を返す」は誤り。3.12 でも警告が出るだけで、削除されてはいない。マイクロ秒まで持つので、秒で切り捨てられることもない。
参考: docs.python.org
この問題を含む AI の出力チェック のテストを制限時間つきで解く
AI の出力チェッククイズへ