概要
Date and Time APIで以下のパターンをJavaとKotlin(ほぼ同じ)で実装する。
- 日時の変更
- 独自フォーマット
- ISOフォーマット
- 月初日時
- 月末日時
実装例
JavaのUtilsクラスだとこちら。
LocalDateUtils.java
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
public class LocalDateTimeUtils {
private static final DateTimeFormatter YYYYMM_FORMAT = DateTimeFormatter.ofPattern("yyyyMM");
// 日時の変更
public static LocalDateTime getDateTimeAfterOneYear(LocalDateTime dateTime) {
return dateTime.plusYears(1);
}
// 独自フォーマット
public static String getYearAndMonth(LocalDateTime dateTime) {
return dateTime.format(YYYYMM_FORMAT);
}
// ISOフォーマット 例)2011-12-03
public static String getIsoLocalDate(LocalDateTime dateTime) {
return dateTime.format(DateTimeFormatter.ISO_LOCAL_DATE);
}
// 月初日時
public static LocalDateTime getFirstDayDateTime(LocalDateTime dateTime) {
return LocalDateTime.of(dateTime.with(TemporalAdjusters.firstDayOfMonth()).toLocalDate(), LocalTime.MIN);
}
// 月末日時
public static LocalDateTime getLastDayDateTime(LocalDateTime dateTime) {
return LocalDateTime.of(dateTime.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(), LocalTime.MAX);
}
}
Kotlinの拡張クラスだとこちら。
LocalDateTime.kt
import java.time.LocalDateTime
import java.time.LocalTime
import java.time.format.DateTimeFormatter
import java.time.temporal.TemporalAdjusters
private val YYYYMM_FORMAT = DateTimeFormatter.ofPattern("yyyyMM")
// 日時の変更
fun LocalDateTime.getDateTimeAfterOneYear(): LocalDateTime = plusYears(1)
// 独自フォーマット
fun LocalDateTime.getYearAndMonth(): String = format(YYYYMM_FORMAT)
// ISOフォーマット 例)2011-12-03
fun LocalDateTime.getIsoLocalDate(): String = format(DateTimeFormatter.ISO_LOCAL_DATE)
// 月初日時
fun LocalDateTime.getFirstDayDateTime(): LocalDateTime = LocalDateTime.of(with(TemporalAdjusters.firstDayOfMonth()).toLocalDate(), LocalTime.MIN)
// 月末日時
fun LocalDateTime.getLastDayDateTime(): LocalDateTime = LocalDateTime.of(with(TemporalAdjusters.lastDayOfMonth()).toLocalDate(), LocalTime.MAX)