■ はじめに
基本的に Java の 日付・時間 を使えるので なんってことはないが、あまりにも使うので まとめておく
実行環境
https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt
■ サンプル
package com.dk.jpalarm.utils import java.text.SimpleDateFormat import java.util.* class DateTimeUtil { companion object { private const val MILLIS_OF_DAY = 1000 * 60 * 60 * 24 private const val TIME_FORMAT_FOR_INT = "%02d:%02d" private const val DATE_FORMAT_FOR_INT = "%04d/%02d/%02d" private const val DATE_FORMAT = "yyyy/MM/dd" private const val TIME_FORMAT = "HH:mm" private const val TIME_DELIMITER = ":" @JvmStatic fun getTime(hourOfDay: Int, minute: Int): String { return TIME_FORMAT_FOR_INT.format(hourOfDay, minute) } @JvmStatic fun getDate(year: Int, month: Int, dayOfMonth: Int): String { return DATE_FORMAT_FOR_INT.format(year, month, dayOfMonth) } @JvmStatic fun getDate(targetDate: Calendar): String { return getDate(targetDate.time) } @JvmStatic fun getDate(targetDate: Date?): String { return if (targetDate == null) { "" } else { val dateFormat = SimpleDateFormat(DATE_FORMAT) dateFormat.format(targetDate) } } @JvmStatic fun getTime(targetTime: Calendar): String { return getTime(targetTime.time) } @JvmStatic fun getTime(targetTime: Date): String { val timeFormat = SimpleDateFormat(TIME_FORMAT) return timeFormat.format(targetTime) } @JvmStatic fun parseDate(date: String): Calendar? { return when (date) { "" -> { null } else -> { val dateFormat = SimpleDateFormat(DATE_FORMAT) val parsedDate = dateFormat.parse(date) if (parsedDate == null) { null } else { toCalendar(parsedDate) } } } } @JvmStatic fun parseTime(time: String): Calendar? { return when (time) { "" -> null else -> { var times = time.split(TIME_DELIMITER) var currentDate = Calendar.getInstance() currentDate.set(Calendar.HOUR_OF_DAY, times[0].toInt()) currentDate.set(Calendar.MINUTE, times[1].toInt()) currentDate.set(Calendar.SECOND, 0) currentDate } } } @JvmStatic fun getDateTime(date: Calendar, time: Calendar): Calendar { var returnValue = date returnValue.set(Calendar.HOUR_OF_DAY, time.get(Calendar.HOUR_OF_DAY)) returnValue.set(Calendar.MINUTE, time.get(Calendar.MINUTE)) returnValue.set(Calendar.SECOND, 0) return returnValue } @JvmStatic fun getPeriod(fromDate: Calendar, toDate: Calendar): Int { val diffTime = toDate.timeInMillis - fromDate.timeInMillis return (diffTime / MILLIS_OF_DAY).toInt() } @JvmStatic fun getWeekIndex(targetDateTime: Calendar): Int { return targetDateTime.get(Calendar.DAY_OF_WEEK) - 1 } @JvmStatic fun toDate(targetDateTime: Calendar?): Date? { return targetDateTime?.time } @JvmStatic fun toCalendar(targetDateTime: Date): Calendar { var returnValue = Calendar.getInstance() returnValue.time = targetDateTime return returnValue } @JvmStatic fun isSameMonth(targetDate: Calendar, sourceMonth: Int): Boolean { return isSame(Calendar.MONTH, targetDate, sourceMonth - 1) } @JvmStatic fun isSameDay(targetDate: Calendar, sourceDay: Int): Boolean { return isSame(Calendar.DAY_OF_MONTH, targetDate, sourceDay) } fun isSameDayOfWeekInMonth(targetDate: Calendar, sourceDayOfWeek: Int): Boolean { return isSame(Calendar.DAY_OF_WEEK_IN_MONTH, targetDate, sourceDayOfWeek) } fun isSameWeek(targetDate: Calendar, sourceWeek: Int): Boolean { return isSame(Calendar.DAY_OF_WEEK, targetDate, sourceWeek) } @JvmStatic fun isSame(targetUnit: Int, target: Calendar, source: Int): Boolean { val targetYear = target.get(targetUnit) return targetYear == source } } }
関連記事
Kotlin ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/09/13/001546
日付・時間 について ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2014/11/18/235600
日付・時間 について ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2016/10/12/235711
日付・時間 について ~ System.currentTimeMillis / System.nanoTime ~
https://dk521123.hatenablog.com/entry/2017/04/25/223122
日付・時間 について ~ Java8編 ~
https://dk521123.hatenablog.com/entry/2018/02/24/014650