メモ書き:今日は何の日?(datetime)

1981年の今日、12月21日にマサチューセッツ州の国際YMCAトレーニングスクールにて世界で初めてバスケットボールの試合が行われたことからバスケットボールの日とされています。この時の試合は1チーム9人で、体育館のバルコニーに設置した桃を入れるカゴにサッカーボールを入れる競技だったそうです。点が入るまで1時間くらいかかったっとか、かかってないとか。

違う、そんな話が書きたかったんじゃない
日付とか使うdatetimeに関するメモ書きです。正直普段から使ってるからこのメモ書いてなかったとは思わなかった。

タイムゾーンとか日付の表記とかの話

JST

日本の標準時のやつ。明石市のアレ。

UTC

世界標準時……あれ?こういう名前じゃなかったっけ?
協定世界時。イギリスロンドンのグリニッジ標準時のアレ。当たり前だけど時差は9時間。

ISO8601フォーマット

別にグリニッジ標準時から8601時間ずれた時刻とかそういうのじゃない。上の2つとは別物。
日付の表記フォーマットの一つ。
yyyy-MM-ddTHH:mm:ssZとかyyyy-MM-ddTHH:mm:ss+09:00とかで書かれるやつ
まあyとかMとか書いている通りTより左が日付、右が時刻。
うっすらわかるだろうけど、最後のZとか+09:00はタイムゾーン
Zはここまでに書いていた日付時刻はUTCのものですよ~っていう表現。じゃあ+0って書けよって気持ちはあるが

UNIX時間・エポック秒

UTCの1970年1月1日からの経過秒数。

datetime.datetime

今の日付時刻を取得:datetime.datetime.now()

ISO8601→datetime:datetime.datetime.fromisoformat()

fromisoformat()は末尾にZが付いた文字列はエラーになる。無能。
Zを+00:00に置き換えるとかしてくれ。

UNIX時間→datetime:datetime.datetime.fromtimestamp()

ローカル時間の影響あるかも。注意。

datetime→UNIX時間:datetime.datetime.timestamp()

floatが返ってくる

dateime.date

曜日の取得:」datetime.date.weekday()

["月","火","水","木","金","土","日"]になってる。
要するに月曜日は0、日曜日が6

datetime.date.isoweekday()

は?

timezone情報がないUTC時刻をJST時刻に変換する

使用例のデータ


これの日付データ

使用例

import json
import pickle
import datetime

# statusに情報を取得している
utc_created_at = status.created_at.replace(tzinfo=datetime.timezone.utc)
jst_created_at = utc_created_at.astimezone(datetime.timezone(datetime.timedelta(hours=+9)))


エラー編

AttributeError: module 'datetime’ has no attribute 'strptime’

strptimeできないんですけど?ってキレられる回。

import datetime
miss_pattern = datetime.strptime("2023-05-21 3:3:04", "%Y-%m-%d %H:%M:%S")

datetimeの中にdatetimeがあるからややこしいが、strptimeの対象となるdatetimeになっていない。(なんて書けばいいかな……)
よくわかんなかったらこの下の2つのなんとかなる例を見て察して。

import datetime
patternA = datetime.datetime.strptime("2023-05-21 3:3:04", "%Y-%m-%d %H:%M:%S")
from datetime import datetime
patternA = datetime.datetime.strptime("2023-05-21 3:3:04", "%Y-%m-%d %H:%M:%S")

formatとか使って日付時刻のゼロ埋めやるときのメモはこっち

271108.hatenablog.com


必要に応じて書き足す