% ./birth.jl --ja
[基礎情報]
今日 : 2025年9月21日(日曜日)(うるう年?否)
誕生日 : 1953年9月20日(日曜日)(うるう年?否)
[差分と年齢]
生誕からの経過日数 : 26299日
満年齢 : 72歳
[次の誕生日]
次の誕生日 : 2026年9月20日(日曜日)
次の誕生日まで : 364日
[年ごとの誕生日一覧](*は日曜)
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
using Dates
# ---------- helpers ----------
weekday_name(d::Date; ja::Bool=false, long::Bool=false) = if ja
long ?
["月曜日","火曜日","水曜日","木曜日","金曜日","土曜日","日曜日"][Int(dayofweek(d))] :
["月","火","水","木","金","土","日"][Int(dayofweek(d))]
else
dayname(d) # English
end
month_name(d::Date; ja::Bool=false) = ja ? string(month(d), "月") : monthname(d)
to_jp_bool(b::Bool) = b ? "可" : "否"
fmt_date_ja(d::Date; long_wday::Bool=true) =
string(Dates.format(d, dateformat"yyyy年m月d日"), "(",
weekday_name(d; ja=true, long=long_wday), ")")
function parse_args()
ja = any(x->x=="--ja", ARGS)
xs = filter(x->x != "--ja", ARGS)
if length(xs) == 3
y = parse(Int, xs[1]); m = parse(Int, xs[2]); d = parse(Int, xs[3])
return Date(y,m,d), ja
else
return Date(1953,9,20), ja
end
end
function next_birthday(bday::Date, today::Date)
y = year(today)
cand = Date(y, month(bday), day(bday))
cand >= today ? cand : Date(y+1, month(bday), day(bday))
end
function list_birthdays(birth::Date; ja::Bool=false)
today_ = Dates.today()
for y in year(birth):year(today_)
d = Date(y, month(birth), day(birth))
age = y - year(birth)
star = (dayofweek(d) == 7) ? "*" : "" # 7=Sunday
if ja
println(fmt_date_ja(d; long_wday=true), " ", age, "歳 ", star)
else
println(d, " age=", rpad(string(age), 3), " ", weekday_name(d; ja=false), " ", star)
end
end
end
# ---------- main ----------
birthday, ja = parse_args()
today_ = Dates.today()
if ja
println("[基礎情報]")
println("今日 : ", fmt_date_ja(today_; long_wday=true),
"(うるう年?", to_jp_bool(isleapyear(today_)), ")")
println("誕生日 : ", fmt_date_ja(birthday; long_wday=true),
"(うるう年?", to_jp_bool(isleapyear(birthday)), ")")
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, "歳")
nb = next_birthday(birthday, today_)
println("\n[次の誕生日]")
println("次の誕生日 : ", fmt_date_ja(nb; long_wday=true))
println("次の誕生日まで : ", Dates.value(nb - today_), "日")
println("\n[年ごとの誕生日一覧](*は日曜)")
list_birthdays(birthday; ja=true)
else
println("[Basic Info]")
println("today : ", today_, " (leap year? ", isleapyear(today_), ")")
println("birthday : ", birthday, " (leap year? ", isleapyear(birthday), ")")
println("month/day : ", month(birthday), "/", day(birthday),
" ", month_name(birthday; ja=false), " ", weekday_name(birthday; ja=false))
println("\n[Difference & Age]")
println("days since birth : ", Dates.value(today_ - birthday), " days")
age_years = year(today_) - year(birthday) - (Date(year(today_), month(birthday), day(birthday)) > today_ ? 1 : 0)
println("age (full years) : ", age_years)
nb = next_birthday(birthday, today_)
println("\n[Next Birthday]")
println("next birthday date : ", nb, " (", weekday_name(nb; ja=false), ")")
println("days until next : ", Dates.value(nb - today_), " days")
println("\n[Birthdays by Year] (*=Sunday)")
list_birthdays(birthday; ja=false)
end
0 件のコメント:
コメントを投稿