LocalDateTimeクラスを新人エンジニアに解説
こんにちは。ゆうせいです。
今回は、JavaのLocalDateTimeクラスについて解説します!
LocalDateTimeは、日付(年月日)と時間(時分秒)を組み合わせた日時を操作するためのクラスで、Java 8以降に導入された新しい日時APIの一部です。
LocalDateTimeとは?
LocalDateTimeは、日付(LocalDate
)と時間(LocalTime
)を組み合わせたクラスで、タイムゾーンを考慮せずに日時を管理できます。不変(immutable)でスレッドセーフなので、簡単かつ安全に使えます。
例えるなら…
LocalDateTimeは、「日時を管理するシンプルなスケジュール帳」のようなものです。例えば、「2025年1月1日 10時30分」のような日時を操作できます。
LocalDateTimeの基本的な使い方
1. LocalDateTimeオブジェクトの作成
現在の日時を取得
LocalDateTime.now()
で現在の日時を取得できます。
import java.time.LocalDateTime;
LocalDateTime now = LocalDateTime.now();
System.out.println("現在の日時: " + now);
特定の日時を生成
LocalDateTime.of()
メソッドで指定した日時を生成します。
LocalDateTime specificDateTime = LocalDateTime.of(2025, 1, 1, 10, 30, 0);
System.out.println("指定した日時: " + specificDateTime);
文字列から日時を生成
LocalDateTime.parse()
を使うと、文字列を日時に変換できます。
LocalDateTime parsedDateTime = LocalDateTime.parse("2025-01-01T10:30:00");
System.out.println("パースした日時: " + parsedDateTime);
2. 年月日・時間の取得
日時の各要素を取得できます。
int year = now.getYear(); // 年
int month = now.getMonthValue(); // 月(数値)
int day = now.getDayOfMonth(); // 日
int hour = now.getHour(); // 時
int minute = now.getMinute(); // 分
int second = now.getSecond(); // 秒
System.out.println("年: " + year);
System.out.println("月: " + month);
System.out.println("日: " + day);
System.out.println("時: " + hour);
System.out.println("分: " + minute);
System.out.println("秒: " + second);
曜日も取得できます。
System.out.println("曜日: " + now.getDayOfWeek()); // 曜日(MONDAY, TUESDAYなど)
3. 日時の操作
LocalDateTimeは日付や時間を簡単に加算・減算できます。
日時を加算
LocalDateTime nextWeek = now.plusWeeks(1); // 1週間後
LocalDateTime nextHour = now.plusHours(1); // 1時間後
System.out.println("1週間後: " + nextWeek);
System.out.println("1時間後: " + nextHour);
日時を減算
LocalDateTime lastMonth = now.minusMonths(1); // 1か月前
LocalDateTime lastDay = now.minusDays(1); // 1日前
System.out.println("1か月前: " + lastMonth);
System.out.println("1日前: " + lastDay);
4. 日時の比較
日時を比較するには、isBefore()
やisAfter()
, equals()
を使用します。
LocalDateTime dateTime1 = LocalDateTime.of(2025, 1, 1, 10, 30);
LocalDateTime dateTime2 = LocalDateTime.of(2025, 12, 31, 23, 59);
if (dateTime1.isBefore(dateTime2)) {
System.out.println(dateTime1 + " は " + dateTime2 + " より前の日時です");
}
if (dateTime2.isAfter(dateTime1)) {
System.out.println(dateTime2 + " は " + dateTime1 + " より後の日時です");
}
5. 日時のフォーマット
日時を特定のフォーマットで表示するには、DateTimeFormatter
を使用します。
import java.time.format.DateTimeFormatter;
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String formattedDateTime = now.format(formatter);
System.out.println("フォーマットされた日時: " + formattedDateTime);
LocalDateTimeのメリットと注意点
メリット
- 直感的なAPI:日時の操作やフォーマットが簡単。
- 不変オブジェクト:スレッドセーフで安全。
- タイムゾーンを気にせず使える:タイムゾーンが必要ない場合に適している。
注意点
- タイムゾーン情報を持たない:タイムゾーンを考慮した日時操作が必要なら
ZonedDateTime
を使用。 - フォーマットの際に注意:カスタムフォーマットを指定しないとISO 8601形式(
yyyy-MM-ddTHH:mm:ss
)で表示される。
実用例
1. イベントの開始日時と終了日時を表示
LocalDateTime start = LocalDateTime.of(2025, 1, 1, 10, 0);
LocalDateTime end = start.plusHours(2); // 2時間後に終了
System.out.println("イベント開始: " + start);
System.out.println("イベント終了: " + end);
2. 未来の締切日を計算
LocalDateTime now = LocalDateTime.now();
LocalDateTime deadline = now.plusDays(10).withHour(17).withMinute(0);
System.out.println("締切日時: " + deadline);
3. 年末までの残り時間を計算
import java.time.temporal.ChronoUnit;
LocalDateTime now = LocalDateTime.now();
LocalDateTime endOfYear = LocalDateTime.of(now.getYear(), 12, 31, 23, 59, 59);
long daysLeft = ChronoUnit.DAYS.between(now, endOfYear);
long hoursLeft = ChronoUnit.HOURS.between(now, endOfYear);
System.out.println("年末まであと " + daysLeft + " 日 (" + hoursLeft + " 時間)");
練習問題
問題:指定した日時の1週間後を表示するプログラム
- ユーザーから日時(例:
2025-01-01T10:30
)を入力。 - 入力された日時から1週間後の日時を計算して表示。
ヒント
LocalDateTime.parse()
で文字列を日時に変換。plusWeeks()
で日時を加算。
import java.time.LocalDateTime;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("日時を入力してください (例: 2025-01-01T10:30): ");
String input = scanner.nextLine();
LocalDateTime dateTime = LocalDateTime.parse(input);
LocalDateTime oneWeekLater = dateTime.plusWeeks(1);
System.out.println("1週間後の日時: " + oneWeekLater);
}
}
まとめと次のステップ
LocalDateTimeは、日付と時刻を簡単かつ安全に扱える便利なクラスです。特に、タイムゾーンを必要としないアプリケーションでの日時操作に最適です。
次に学ぶと良いテーマ:
- ZonedDateTime:タイムゾーンを含む日時操作。
- DurationとPeriod:時間や期間を扱うクラス。
- DateTimeFormatter:日時の高度なフォーマット操作。
ぜひ、実際のプログラムで試してみてください!
セイ・コンサルティング・グループの新人エンジニア研修のメニューへのリンク
投稿者プロフィール
-
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。
最新の投稿
- 新入社員2025年1月8日新人エンジニアの皆さんに向けて「共有フォルダのマナー」を解説
- 新人エンジニア研修講師2025年1月7日研修講師が道徳的免罪符(moral licensing)に陥らないためにできること
- 新入社員2025年1月7日Windowsユーザーの日常生活や仕事で役立つPythonプログラム30選
- 新入社員2025年1月7日Pythonの入門研修の最後に行う演習の例