Kotlin:
将来または過去の日付を計算する
How to:(やり方)
import java.time.LocalDate
import java.time.temporal.ChronoUnit
fun main() {
val today = LocalDate.now()
val tenDaysLater = today.plusDays(10)
val twoWeeksBefore = today.minus(2, ChronoUnit.WEEKS)
println("Today: $today") // 例:Today: 2023-04-01
println("10 days later: $tenDaysLater") // 例:10 days later: 2023-04-11
println("Two weeks before: $twoWeeksBefore") // 例:Two weeks before: 2023-03-18
}
このコードは今日の日付を取得し、10日後と2週間前の日付を計算して出力します。
Deep Dive(掘り下げ)
日付を操作するには、過去はjava.util.Date
やjava.util.Calendar
が使われてきましたが、Java 8以降ではjava.time
パッケージにあるLocalDate
、LocalDateTime
、ZonedDateTime
が推奨されています。これらのクラスは不変(Immutable)であり、日時操作における一般的な問題を減らします。plus
やminus
メソッドを利用することで、簡単に日付の加算・減算ができるようになっています。
KotlinではJavaのライブラリを利用できるため、上記のメソッドがそのまま使用可能です。他の代替手段には、オープンソースの日付・時刻ライブラリであるJoda-Timeがありますが、現在ではjava.time
に移行することが一般的です。
具体的な実装には、日付の加算だけでなくビジネス日(休業日を除く)の計算や、タイムゾーンを考慮した計算など、ケースに応じたさまざまな処理が必要になることがあります。これらはjava.time
パッケージを使っても、時には追加のライブラリや自作のロジックが必要になるかもしれません。
See Also(関連情報)
- OracleのJavaドキュメントにある
java.time
パッケージの詳細: Java Platform, Standard Edition & Java Development Kit, Version 17 API Specification - Threeten-Backport(古いJavaバージョン用の
java.time
バックポート): ThreeTen-Backport - Joda-Timeプロジェクト: Joda-Time
- Stack Overflowでの日付と時刻に関する議論: Stack Overflow