クジラの練習帳013(カレンダー作成)
練習帳013
前回に引き続きネットで拾った問題を解きます
問題
カレンダー作成。
完成出力結果
解答
解説
1~5行目は簡単に説明します。
require 'date'
head = Date.today.strftime("%B %Y")
year = Date.today.year
mon = Date.today.mon
dateクラスの読み込み(1行目)
今日の西暦、月名、年月を整数で取得(3~5行目)
firstday = Date.new(year,mon,1).wday
lastday = Date.new(year,mon,-1).day
firstdayは今月の1日の曜日を取得します。
lastdayは今月の最終日を取得します。
week = %w(日 月 火 水 木 金 土)
week変数に曜日を入れています。0~6を日本語に変換しています。
puts head
puts week.join(" ")
print " " * firstday
headは上記にありますが、月名(December)と西暦(2020)を出力。
week.join(" ")は曜日を連続で出力し、(" ")は曜日の間の隙間を表す。
print " " * firstdayは今月1日の位置合わせを行っています。
(1..lastday).each do |date|
print date.to_s.rjust(2) + " "
firstday += 1
if firstday%7==0
print "\n"
end
end
今月1日~最終日までを出力します。
if firstday%7で土曜日までの出力したら改行するように
if firstday%7!=0
print "\n"
end
最終日が土曜日出なかった場合、改行されないので記述。
参考
Dateクラス - 日付(Date、DateTime)クラス - Ruby入門
年月日などの日付要素を取得する - 日付(Date、DateTime)クラス - Ruby入門
class Date (Ruby 2.7.0 リファレンスマニュアル)
Time#strftime (Ruby 2.7.0 リファレンスマニュアル)
Rubyのjoinメソッドの使い方を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
久しぶりのカレンダー作成、Dateクラスの扱いでした。細かくて覚えるのは難しい(・・;)
前回 クジラの練習帳012 - whale_86’s blog
次回 クジラの練習帳014(じゃんけんゲーム) - whale_86’s blog