クジラの練習帳013(カレンダー作成)

練習帳013

f:id:whale_86:20201125190129j:plain

前回に引き続きネットで拾った問題を解きます

問題

カレンダー作成。

 

完成出力結果

f:id:whale_86:20201201202437p:plain

 

解答

f:id:whale_86:20201201225046p:plain

解説

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