今月は何日まであるのか?

投稿者: | 2015年5月6日

カレンダーを表示するためには今月が何日まであるのかを知る必要があります。「大の月、小の月」、小学校で習いましたね。算数だっけ?理科だっけ?

そこで月ごとの月末日を並べた配列を用意して、これを読むことにしましょう。閏年は2月のデータを書き換えて対応します。ちなみに…

  • 4で割り切れる年は閏年
  • ただし100で割り切れる年は除外する
  • けれども400で割り切れる年はやっぱり閏年

ということですよ。

#! /usr/bin/swift
import Foundation
let now: Date = Date()
let cal: Calendar = Calendar(identifier: .gregorian)
let cal_comp: DateComponents = cal.dateComponents([.year, .month, .day, .weekday], from:now)
let weekday: [String] = ["日","月","火","水","木","金","土"]
print("今日は\(cal_comp.year!)年\(cal_comp.month!)月\(cal_comp.day!)日\(weekday[cal_comp.weekday! - 1])曜日")
var endofmonth: [Int] = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
if (cal_comp.year! % 4) == 0 && (cal_comp.year! % 100) != 0 || (cal_comp.year! % 400) == 0 {
    endofmonth[2]+=1
}
print("今月は\(endofmonth[cal_comp.month!])日まであるよ!")
print("今年の2月は\(endofmonth[2])日まであるよ!")

閏年の判定行は3つの条件を一気に判定しています。ここで使っている論理演算子(&&とか||)は別途補講で説明します。というわけで実行結果。

$ ./lastday.swift
今日は2015年5月6日水曜日
今月は31日まであるよ!
今年の2月は28日まであるよ!