koshi@mba2020 ~ % ./birth.jl
【基礎情報】
今日 : 2025年9月21日(日曜日)
誕生日 : 1953年9月20日(日曜日)
【差分と年齢】
生誕からの経過日数 : 26299日
満年齢 : 72歳
【年ごとの誕生日一覧】(*は日曜) ※最終年:2025年
1953年9月20日(日曜日) 0歳 *
1954年9月20日(月曜日) 1歳
1955年9月20日(火曜日) 2歳
1956年9月20日(木曜日) 3歳
1957年9月20日(金曜日) 4歳
1958年9月20日(土曜日) 5歳
1959年9月20日(日曜日) 6歳 *
1960年9月20日(火曜日) 7歳
1961年9月20日(水曜日) 8歳
1962年9月20日(木曜日) 9歳
1963年9月20日(金曜日) 10歳
1964年9月20日(日曜日) 11歳 *
1965年9月20日(月曜日) 12歳
1966年9月20日(火曜日) 13歳
1967年9月20日(水曜日) 14歳
1968年9月20日(金曜日) 15歳
1969年9月20日(土曜日) 16歳
1970年9月20日(日曜日) 17歳 *
1971年9月20日(月曜日) 18歳
1972年9月20日(水曜日) 19歳
1973年9月20日(木曜日) 20歳
1974年9月20日(金曜日) 21歳
1975年9月20日(土曜日) 22歳
1976年9月20日(月曜日) 23歳
1977年9月20日(火曜日) 24歳
1978年9月20日(水曜日) 25歳
1979年9月20日(木曜日) 26歳
1980年9月20日(土曜日) 27歳
1981年9月20日(日曜日) 28歳 *
1982年9月20日(月曜日) 29歳
1983年9月20日(火曜日) 30歳
1984年9月20日(木曜日) 31歳
1985年9月20日(金曜日) 32歳
1986年9月20日(土曜日) 33歳
1987年9月20日(日曜日) 34歳 *
1988年9月20日(火曜日) 35歳
1989年9月20日(水曜日) 36歳
1990年9月20日(木曜日) 37歳
1991年9月20日(金曜日) 38歳
1992年9月20日(日曜日) 39歳 *
1993年9月20日(月曜日) 40歳
1994年9月20日(火曜日) 41歳
1995年9月20日(水曜日) 42歳
1996年9月20日(金曜日) 43歳
1997年9月20日(土曜日) 44歳
1998年9月20日(日曜日) 45歳 *
1999年9月20日(月曜日) 46歳
2000年9月20日(水曜日) 47歳
2001年9月20日(木曜日) 48歳
2002年9月20日(金曜日) 49歳
2003年9月20日(土曜日) 50歳
2004年9月20日(月曜日) 51歳
2005年9月20日(火曜日) 52歳
2006年9月20日(水曜日) 53歳
2007年9月20日(木曜日) 54歳
2008年9月20日(土曜日) 55歳
2009年9月20日(日曜日) 56歳 *
2010年9月20日(月曜日) 57歳
2011年9月20日(火曜日) 58歳
2012年9月20日(木曜日) 59歳
2013年9月20日(金曜日) 60歳
2014年9月20日(土曜日) 61歳
2015年9月20日(日曜日) 62歳 *
2016年9月20日(火曜日) 63歳
2017年9月20日(水曜日) 64歳
2018年9月20日(木曜日) 65歳
2019年9月20日(金曜日) 66歳
2020年9月20日(日曜日) 67歳 *
2021年9月20日(月曜日) 68歳
2022年9月20日(火曜日) 69歳
2023年9月20日(水曜日) 70歳
2024年9月20日(金曜日) 71歳
2025年9月20日(土曜日) 72歳
ChatGPT-5 Thinking が提案してきたコードは以下のとおりである。かなり修正してもらった。
#!/usr/bin/env julia
# birth.jl
using Dates
# --- ヘルパ ---
const WDAY_SHORT = ["月","火","水","木","金","土","日"]
const WDAY_LONG = ["月曜日","火曜日","水曜日","木曜日","金曜日","土曜日","日曜日"]
fmt_date_ja(d::Date; long_wday::Bool=true) = string(
Dates.format(d, dateformat"yyyy年m月d日"), "(",
(long_wday ? WDAY_LONG : WDAY_SHORT)[dayofweek(d)], ")"
)
# 引数: [YYYY MM DD [ENDYEAR]]
function parse_args()
if length(ARGS) == 0
return Date(1953, 9, 20), year(Dates.today())
elseif length(ARGS) == 3 || length(ARGS) == 4
b = Date(parse(Int, ARGS[1]), parse(Int, ARGS[2]), parse(Int, ARGS[3]))
lasty = (length(ARGS) == 4) ? parse(Int, ARGS[4]) : year(Dates.today())
return b, lasty
else
error("使い方: ./birth.jl または ./birth.jl YYYY M D [ENDYEAR]")
end
end
function list_birthdays(birth::Date, last_year::Int)
last_year = max(last_year, year(birth)) # 下限は誕生年
for y in year(birth):last_year
d = Date(y, month(birth), day(birth))
age = y - year(birth)
star = (dayofweek(d) == 7) ? "*" : "" # 7 = 日曜
println(fmt_date_ja(d; long_wday=true), " ", age, "歳 ", star)
end
end
# --- 本体 ---
birthday, list_until = parse_args()
today = Dates.today()
println("【基礎情報】")
println("今日 : ", fmt_date_ja(today; long_wday=true))
println("誕生日 : ", fmt_date_ja(birthday; long_wday=true))
println("\n【差分と年齢】")
days_elapsed = Dates.value(today - birthday)
age_years = year(today) - year(birthday) - (Date(year(today), month(birthday), day(birthday)) > today ? 1 : 0)
println("生誕からの経過日数 : ", days_elapsed, "日")
println("満年齢 : ", age_years, "歳")
println("\n【年ごとの誕生日一覧】(*は日曜) ※最終年:", list_until, "年")
list_birthdays(birthday, list_until)