Bus errorとSegmentation faultに困ったら見るブログ

物理の研究者による日々の研究生活のメモ書きです ( python/emacs/html/Japascript/シェルスクリプト/TeX/Mac/C言語/Linux/git/tmux/R/ポケモンGO)

【python3, datetime】任意の形式でdatetimeを出力したい + UTCから日本時間(JST)に変換したい + 1日前の日付にしたい

cgiからpythonを動かして色々とやるツールを少し前からちょこちょこ作ってる
その中で不特定多数のユーザーが走らせたコマンドを記録したくなった
いつ走らせたか、どんなオプションを使ったか
これをログに残しておく

そこで走らせた日付を知りたい



Pythonのdatetimeで日付や時間と文字列を変換(strftime, strptime) | note.nkmk.me

import datetime
d_today = datetime.date.today()
print(d_today)
# 2019-02-04

とか
時間入りで日付を知りたいときはnowを使う

dt_now = datetime.datetime.now()

print(dt_now)
# 2019-02-04 21:04:15.412854

このdatetime型を任意の形式で出力したい
C言語で例えるなら、printf("%f %f")みたいなことをやりたい

datetime --- 基本的な日付と時間の型 — Python 3.13.1 ドキュメント

月を取り出したい時とか年を取り出したい時は、それぞれ使うものが決まってる

主な書式コードを挙げておく。
よく使うものだけリストしておく

  • %Y: 0埋めした10進数で表記した西暦4桁
    • %y: 0埋めした10進数で表記した西暦の下2桁
  • %m: 0埋めした10進数で表記した月
  • %d: 0埋めした10進数で表記した月中の日にち
  • %H: 0埋めした10進数で表記した時 (24時間表記)
  • %I: 0埋めした10進数で表記した時 (12時間表記)
  • %M: 0埋めした10進数で表記した分
  • %S: 0埋めした10進数で表記した秒
  • %f: 0埋めした10進数で表記したマイクロ秒(6桁)
  • %Z: timezone

timezoneについては
Python, datetime, pytzでタイムゾーンを設定・取得・変換・削除 | note.nkmk.me


これを使って

import datetime

dt_now = datetime.datetime.now()

print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2024-10-08 10:45:41 のように表示される

みたいにすれば良い

UTCから日本時間んに変換したい時は

import datetime
JST_beg = utc_beg + datetime.timedelta(hours=9)

1日前の日付にしたいときは

import datetime
utc = utc_beg + datetime.timedelta(days=-1)

時間, 分、秒に0を代入したい場合

import datetime
utc = utc_beg.replace(hour=0, minute=0, second=0)

Python | 日付や時刻の一部の値を別の値に置き換えたインスタンスを生成する

ランキングに参加中、クリックにご協力お願いします!