📅
kotlinで月の日数を取得する
概要
LocalDate型の日付"2021-04-05"
に対して、その月の総日数を出力したい場合。
lengthOfMonth
メソッドを使用して取得することができる。
ドキュメントを参照してみる
使い方
LocalDate型に対して使用する。戻り値はInt
val lengthOfMonth = LocalDate.now().lengthOfMonth()
println(lengthOfMonth)
> 出力
> 2021年2月の場合・・・29
> 2020年2月の場合・・・28
LocalDateクラス内で、lengthOfMonthの仕組みを覗いてみる
public final class LocalDate implements Temporal, TemporalAdjuster, ChronoLocalDate, Serializable {
public static final LocalDate MIN = of(-999999999, 1, 1);
public static final LocalDate MAX = of(999999999, 12, 31);
public static final LocalDate EPOCH = of(1970, 1, 1);
private static final long serialVersionUID = 2942565459149668126L;
private static final int DAYS_PER_CYCLE = 146097;
static final long DAYS_0000_TO_1970 = 719528L;
private final int year;
private final short month;
private final short day;
// おなじみの今日の日付
public static LocalDate now() {
return now(Clock.systemDefaultZone());
}
// 今回のメソッド。
public int lengthOfMonth() {
switch(this.month) {
case 2:
return this.isLeapYear() ? 29 : 28;
case 3:
case 5:
case 7:
case 8:
case 10:
default:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
}
}
// 其の年の日数を返してくれるメソッド。うるう年かそうでないかで、戻り値が変わる。
public int lengthOfYear() {
return this.isLeapYear() ? 366 : 365;
}
}
lengthOfMonthメソッド
public int lengthOfMonth() {
switch(this.month) {
case 2:
return this.isLeapYear() ? 29 : 28;
case 3:
case 5:
case 7:
case 8:
case 10:
default:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
}
}
switch文内で月12
を受け取り、月ごとに返却する値を30か31か分岐させている。
2月はうるう年があるので特殊。
Discussion