tkinter で年月日を入力し、米雇用統計発表日からのオフセットを表示します。
2003年~2026年8月の期間を対象にしています。
- 参考記事
下記の記事で作成したプログラムを改造して作ります。
米雇用統計発表日については、下記記事にまとめています。
実際に書いたコード
# 年月日を入力し、米雇用統計発表日からのオフセットを表示する
# オフセット:日数、発表日当日は0、発表日前はマイナス、発表後はプラス
import tkinter as tk
from datetime import datetime, timedelta
def show_offset():
year = year_entry.get()
month = month_entry.get()
day = day_entry.get()
# 入力が数字がどうかチェック
if not (year.isdigit() and month.isdigit() and day.isdigit()):
result_label.config(text="数字を入力してください")
return
try:
# 入力年月日
y0 = int(year)
m0 = int(month)
d0 = int(day)
dt0 = datetime(y0, m0, d0)
# 入力年月から前月12日を計算
y = y0
m = m0
d = 12
m -= 1
if m < 1:
m = 12
y -= 1
dt = datetime(y, m, d) # 前月12日
except ValueError:
result_label.config(text="存在しない年月です")
return
# 12日を含む週が終わってから3回目の金曜日が翌月の何日かを計算
weekday_sunday0 = dt.isoweekday() % 7 # 日曜日=0 に変換
friday = d + 5 - weekday_sunday0 # 12日を含む週の金曜日
friday_3 = datetime(y, m, friday) + timedelta(
days=21
) # 12日を含む週の金曜日から3週間後
# 例外チェック
# 2003年以降、2026年8月までを対象としています。
# この例外は、現在内容を確認中です。参考程度にしてください。
# 私が全ての年月で比較した上で作成した表ではなく、
# 正確さがどの程度なのか分かっていません。
result = friday_3
cancel = False
if result == datetime(2003, 7, 4):
result = result.replace(day=3)
if result == datetime(2008, 7, 4):
result = result.replace(day=3)
if result == datetime(2013, 10, 4):
result = result.replace(day=22)
if result == datetime(2013, 11, 1):
result = result.replace(day=8)
if result == datetime(2015, 7, 3):
result = result.replace(day=2)
if result == datetime(2020, 7, 3):
result = result.replace(day=2)
if result == datetime(2025, 11, 7):
cancel = True # 中止
if result == datetime(2025, 12, 5):
result = result.replace(day=16)
if result == datetime(2026, 1, 2):
result = result.replace(day=10)
if result == datetime(2026, 2, 6):
result = result.replace(day=11)
if result == datetime(2026, 7, 3):
result = result.replace(day=2)
if cancel:
offset_label.config(text="中止")
else:
offset = dt0.day - result.day
offset_label.config(text=f"{offset:+d}")
# :+dは、正の数とゼロに"+"を付ける指定子
# --- GUI構築 ---
root = tk.Tk()
root.title("米雇用統計発表日からのオフセットを表示")
root.geometry("600x200")
tk.Label(root, text="年").pack()
year_entry = tk.Entry(root)
year_entry.pack()
tk.Label(root, text="月").pack()
month_entry = tk.Entry(root)
month_entry.pack()
tk.Label(root, text="日").pack()
day_entry = tk.Entry(root)
day_entry.pack()
tk.Button(
root,
text="米雇用統計発表日からのオフセットを表示",
command=show_offset,
).pack()
offset_label = tk.Label(root, text="")
offset_label.pack()
root.mainloop()
解説
f”{offset:+d}”
offset_label.config(text=f"{offset:+d}")
:+d は、Python のフォーマット指定子で 「符号を必ず表示する」 という意味になります。 正の値は +5、負の値は -3、ゼロは +0 のように、必ず符号が付きます。
実行結果
Auto Py to Exe で、Windowsのexeアプリ化して、実行。






HR