日時操作
この章では、日付や時刻を扱うための 日時操作 について学ぶ。
Java 8で導入されたjava.timeパッケージを使うことで、日付や時刻を簡単に扱えるようになる。
この章で得られるスキル:
- ✅ 日付や時刻を正確に扱うプログラムが書ける
- ✅ 予約システムや期限管理の機能が実装できる
- ✅ 日付の計算や比較が簡単にできる
- ✅ ユーザーに見やすい形式で日時を表示できる
なぜこの技術が必要か
日時操作がないとどうなるか?
日付や時刻を扱うプログラムは多い(予約システム、勤怠管理、スケジュール管理など)。 適切な日時操作の仕組みがないと、日付の計算や比較が複雑になる。
例:
// 今日の日付を取得
LocalDate today = LocalDate.now();
System.out.println("今日: " + today);
// 1週間後の日付を計算
LocalDate nextWeek = today.plusDays(7);
System.out.println("1週間後: " + nextWeek);
// 年齢を計算
LocalDate birthday = LocalDate.of(2000, 5, 15);
Period age = Period.between(birthday, today);
System.out.println("年齢: " + age.getYears() + "歳");
日時操作の仕組みを使うことで、複雑な日付計算を簡単に実現できる。
1. java.timeパッケージとは
java.timeの概要
java.timeパッケージ は、**Java 8で導入された新しい日時APIで、日付や時刻を扱うためのクラス群である。
主なクラス
| クラス | 説明 | 例 |
|---|---|---|
LocalDate | 日付(年月日) | 2024-01-15 |
LocalTime | 時刻(時分秒) | 14:30:00 |
LocalDateTime | 日時(年月日時分秒) | 2024-01-15T14:30:00 |
Period | 期間(日付の差) | 3年2ヶ月5日 |
Duration | 時間(時刻の差) | 2時間30分 |
2. LocalDate(日付)
LocalDateとは
LocalDate は、日付(年月日)を表すクラス である。
時刻情報は持たない。
基本的な使い方
import java.time.LocalDate;
// 今日の日付
LocalDate today = LocalDate.now();
// 特定の日付を作成
LocalDate date = LocalDate.of(2024, 1, 15); // 2024年1月15日
// 日付の要素を取得
int year = date.getYear(); // 年
int month = date.getMonthValue(); // 月(1-12)
int day = date.getDayOfMonth(); // 日
実行してみよう:
やってみよう:
- 自分の誕生日を設定して、今日との比較をしてみよう
日付の計算
LocalDate today = LocalDate.now();
// 日付の加算
LocalDate tomorrow = today.plusDays(1); // 1日後
LocalDate nextWeek = today.plusWeeks(1); // 1週間後
LocalDate nextMonth = today.plusMonths(1); // 1ヶ月後
LocalDate nextYear = today.plusYears(1); // 1年後
// 日付の減算
LocalDate yesterday = today.minusDays(1); // 1日前
LocalDate lastWeek = today.minusWeeks(1); // 1週間前
実行してみよう:
やってみよう:
- 100日後の日付を計算してみよう
LocalDateは イミュータブル(変更不可)である。
plusDays()などのメソッドは、元のオブジェクトを変更せず、新しいオブジェクトを返す。
LocalDate date = LocalDate.now();
date.plusDays(1); // これだけでは date は変わらない!
System.out.println(date); // 元の日付のまま
LocalDate newDate = date.plusDays(1); // 新しいオブジェクトを受け取る
System.out.println(newDate); // 1日後の日付
3. LocalTime(時刻)
LocalTimeとは
LocalTime は、時刻(時分秒)を表すクラス である。
日付情報は持たない。
基本的な使い方
import java.time.LocalTime;
// 現在の時刻
LocalTime now = LocalTime.now();
// 特定の時刻を作成
LocalTime time = LocalTime.of(14, 30); // 14:30
LocalTime time2 = LocalTime.of(14, 30, 45); // 14:30:45
// 時刻の要素を取得
int hour = time.getHour(); // 時
int minute = time.getMinute(); // 分
int second = time.getSecond(); // 秒
実行してみよう:
やってみよう:
- 現在時刻が営業時間内かどうかを判定するプログラムを改良してみよう
4. LocalDateTime(日時)
LocalDateTimeとは
LocalDateTime は、日付と時刻の両方を表すクラス である。
基本的な使い方
import java.time.LocalDateTime;
// 現在の日時
LocalDateTime now = LocalDateTime.now();
// 特定の日時を作成
LocalDateTime dateTime = LocalDateTime.of(2024, 1, 15, 14, 30);
// 要素を取得
int year = dateTime.getYear();
int hour = dateTime.getHour();
実行してみよう:
やってみよう:
- イベントまでの残り日数を表示するコードを追加してみよう
5. 期間の計算
Period(日付の期間)
Period は、日付の期間(年月日の差)を表すクラス である。
import java.time.LocalDate;
import java.time.Period;
LocalDate start = LocalDate.of(2020, 1, 1);
LocalDate end = LocalDate.of(2024, 3, 15);
Period period = Period.between(start, end);
int years = period.getYears(); // 年
int months = period.getMonths(); // 月
int days = period.getDays(); // 日
実行してみよう:
やってみよう:
- 自分の誕生日から今日までの期間を計算してみよう
Duration(時刻の期間)
Duration は、時刻の期間(時間の差)を表すクラス である。
import java.time.LocalTime;
import java.time.Duration;
LocalTime start = LocalTime.of(9, 0);
LocalTime end = LocalTime.of(17, 30);
Duration duration = Duration.between(start, end);
long hours = duration.toHours(); // 時間
long minutes = duration.toMinutes(); // 分
実行してみよう:
やってみよう:
- 休憩時間を複数回設定して、実働時間を計算してみよう
6. 日時のフォーマット
DateTimeFormatterとは
DateTimeFormatter は、日時を文字列にフォーマットしたり、文字列を日時にパースする クラスである。
フォーマット(日時 → 文字列)
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
LocalDate date = LocalDate.now();
// 定義済みフォーマット
String str1 = date.format(DateTimeFormatter.ISO_DATE); // 2024-01-15
// カスタムフォーマット
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
String str2 = date.format(formatter); // 2024年01月15日
パース(文字列 → 日時)
String dateString = "2024-01-15";
LocalDate date = LocalDate.parse(dateString);
String dateString2 = "2024年01月15日";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");
LocalDate date2 = LocalDate.parse(dateString2, formatter);
実行してみよう:
やってみよう:
- 自分でフォーマットパターンを作成して、様々な形式で日時を表示してみよう
主なフォーマットパターン
| パターン | 意味 | 例 |
|---|---|---|
yyyy | 年(4桁) | 2024 |
MM | 月(2桁) | 01, 12 |
dd | 日(2桁) | 01, 31 |
HH | 時(24時間制) | 00-23 |
mm | 分 | 00-59 |
ss | 秒 | 00-59 |
a | 午前/午後 | AM, PM |
月は MM、分は mm で表す。大文字小文字を間違えないように注意が必要である。
// ❌ 間違い
DateTimeFormatter.ofPattern("yyyy-mm-dd"); // mmは分になってしまう
// ✅ 正しい
DateTimeFormatter.ofPattern("yyyy-MM-dd"); // MMが月
まとめ
この章では、日時操作 について学んだ。
学んだ内容
java.timeパッケージ で日付や時刻を扱えるLocalDateで日付(年月日)を扱えるLocalTimeで時刻(時分秒)を扱えるLocalDateTimeで日時(年月日時分秒)を扱えるPeriodで日付の期間を計算できるDurationで時刻の期間を計算できるDateTimeFormatterで日時のフォーマット・パースができる- 日時オブジェクトは イミュータブル である
これで基礎編は完了
Java基礎編の全16章を完了した。 次のステップでは、これらの知識を活用して、Webアプリケーション開発(Spring Framework)やデータベース操作(SQL)を学んでいく。