Menu
CoddyTech

LocalDateTime の使用

CoddyのJavaジャーニー「ロジックとフロー」セクションの一部。レッスン 56/59。

JavaのLocalDateTimeは日付と時刻の両方を組み合わせたものです。イベントの予定やタイムスタンプなど、両方の要素を扱う必要がある場合に便利です。

現在の日付と時刻を作成する

LocalDateTime now = LocalDateTime.now();

特定の日付と時刻を作成します:

LocalDateTime dateTime = LocalDateTime.of(2024, 3, 15, 14, 30);
// 2024-03-15 14:30

上記のコードを実行すると、dateTimeには次の値が入ります:

2024-03-15T14:30

日付と時刻をフォーマットします。

LocalDateTime dateTime = LocalDateTime.of(2024, 3, 15, 14, 30);
String formatted = dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));

同じパターンでStringから日付と時刻を解析します:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime parsed = LocalDateTime.parse("2024-03-15 14:30", formatter);  // 2024-03-15T14:30

フォーマッターがない場合、LocalDateTime.parse() はISO形式の 2024-03-15T14:30 だけを受け付けます。パターンに合わない文字列は DateTimeParseException をスローするため、LocalDate.parse() のときと同じように、呼び出しをtry-catchで囲みましょう。

challenge icon

チャレンジ

簡単

processDateTimeという名前のメソッドを作成し、次の4つの引数を受け取るようにしてください。

  1. 形式が "yyyy-MM-dd HH:mm" の文字列(dateTimeStr)
  2. 加算または減算する整数(amount)
  3. "hours"、"days"、"months" のいずれかの文字列(unit)
  4. "add" または "subtract" の文字列(operation)

このメソッドでは、次の処理を行います。

  1. 入力された日時文字列を解析する
  2. 指定された操作を実行する
  3. 結果に関する情報をフォーマットして返す

返すメッセージは次のとおりです。

  • 形式が無効な場合:"Invalid date time format" を返す
  • 単位が無効な場合:"Invalid unit" を返す
  • 操作が無効な場合:"Invalid operation" を返す
  • 成功した場合:"Original: [datetime], New: [new_datetime], Day: [day_name]" を返す。両方の日時は yyyy-MM-dd HH:mm 形式で表記し、[day_name] は新しい日時の曜日を大文字で表します(例:FRIDAY)。

自分で試してみよう

import java.util.Scanner;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

public class Main {
    public static String processDateTime(String dateTimeStr, int amount, String unit, String operation) {
        // ここにコードを書いてください
    }
    
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String dateTimeStr = scanner.nextLine();
        int amount = Integer.parseInt(scanner.nextLine());
        String unit = scanner.nextLine();
        String operation = scanner.nextLine();
        
        System.out.println(processDateTime(dateTimeStr, amount, unit, operation));
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ