Skip to content

Instantly share code, notes, and snippets.

@hyuki

hyuki/chat.md Secret

Last active March 28, 2023 00:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hyuki/6e28cbfd00247cba7c21ae29c9c8a164 to your computer and use it in GitHub Desktop.
Save hyuki/6e28cbfd00247cba7c21ae29c9c8a164 to your computer and use it in GitHub Desktop.
#ChatGPT と結城浩の対話: Pythonで現在日時を得る方法(曜日付き)

Date: 2023-03-28 (Tue) 09:13:48

Model: gpt-4

現在日時を "YYYY-MM-DD (w) HH:mm:ss" の形式で得る方法を教えてください。UTCではなくローカル時間です。wは曜日のつもりです。プログラミング言語はPythonでお願いします。

Pythonでローカル時間を "YYYY-MM-DD (w) HH:mm:ss" の形式で取得する方法は以下のようになります。

from datetime import datetime

# 現在のローカル時間を取得
now = datetime.now()

# 曜日のリスト
weekday_list = ['月', '火', '水', '木', '金', '土', '日']

# フォーマットに従って文字列に変換
formatted_time = now.strftime(f"%Y-%m-%d ({weekday_list[now.weekday()]}) %H:%M:%S")

print(formatted_time)

strftime()メソッドを使って時刻をフォーマットし、曜日はweekday_listから取得します。これで、指定された形式のローカル時間が得られます。

strftimeの特殊文字の中には曜日を表すものは含まれていないのでしょうか。

すみません、私の説明が不十分でした。strftimeの特殊文字の中には、曜日を表すものも含まれています。具体的には、以下の特殊文字が利用可能です。

  • %a: 短縮された曜日名 (例: Mon)
  • %A: 完全な曜日名 (例: Monday)
  • %w: 曜日を数字で表す (0: 日曜日, 1: 月曜日, ..., 6: 土曜日)

ただし、これらの特殊文字は英語の曜日名や数字での表現となります。日本語の曜日名を取得するためには、上の回答で示したように曜日のリストを用意する必要があります。

以下に、日本語の曜日名を含む形式で出力する例を改めて示します。

from datetime import datetime

# 現在のローカル時間を取得
now = datetime.now()

# フォーマットに従って文字列に変換
formatted_time = now.strftime("%Y-%m-%d (%a) %H:%M:%S")

# 英語の曜日名を日本語の曜日名に変換
weekday_eng_to_jp = {
    'Mon': '月',
    'Tue': '火',
    'Wed': '水',
    'Thu': '木',
    'Fri': '金',
    'Sat': '土',
    'Sun': '日',
}
for eng, jp in weekday_eng_to_jp.items():
    formatted_time = formatted_time.replace(eng, jp)

print(formatted_time)

こちらが日本語の曜日名を含む形式で現在日時を表示する方法です。strftimeで英語の曜日名を取得し、辞書を使って日本語の曜日名に変換しています。

わかりました。ありがとうございます。私の目的には %a を使えばよさそうです。質問が不十分でごめんなさい。

いえいえ、質問が不十分ではありません。私の方で十分に理解していなかったことが問題でした。お力になれてうれしいです。

%a を使った形式で現在日時を表示する方法は以下の通りです。

from datetime import datetime

# 現在のローカル時間を取得
now = datetime.now()

# フォーマットに従って文字列に変換
formatted_time = now.strftime("%Y-%m-%d (%a) %H:%M:%S")

print(formatted_time)

このように書くと、現在日時が "YYYY-MM-DD (AbbrWeekday) HH:mm:ss" の形式で表示されます。AbbrWeekdayの部分は例えば "Mon" のような短縮された曜日名になります。

何か他にもご質問があればお気軽にお聞かせください。お手伝いできることがあれば喜んで対応いたします。

@hyuki
Copy link
Author

hyuki commented Mar 28, 2023

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment