시간대 처리
Coddy Java 여정의 논리와 흐름 섹션에 포함된 레슨. 59개 중 59번째.
Java의 ZonedDateTime은 시간대가 포함된 날짜와 시간을 나타냅니다. 서로 다른 시간대를 다루거나 시간대 간에 변환할 때 유용합니다.
특정 시간대의 시간을 생성하세요:
ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));LocalDateTime을 사용하여 .atZone()으로 ZonedDateTime도 생성할 수 있습니다:
LocalDateTime localDT = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = localDT.atZone(ZoneId.of("Asia/Tokyo"));시간대를 변환합니다:
ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));위 코드를 실행하면 newYork에는 tokyo와 동일한 순간이지만 뉴욕 시간대인 값이 포함됩니다:
2024-03-15T10:30-04:00[America/New_York]
// 예제 출력ZonedDateTime을 형식화하려면 DateTimeFormatter를 사용하세요. xxx 패턴으로 오프셋을 추가하면 +09:00 또는 -04:00으로 출력되며, 오프셋이 0인 경우에는 +00:00으로 출력됩니다(대신 대문자 XXX는 오프셋이 0인 경우 Z를 출력합니다):
// 오프셋 없이
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
// 오프셋 포함 (예: +09:00 또는 -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String result = newYork.format(fmtWithOffset);
// 예: 2024-03-15 10:30 -04:00챌린지
쉬움convertTime라는 이름의 메서드를 만들고 다음 네 가지 인수를 받도록 하세요:
- 형식이 "yyyy-MM-dd HH:mm"인 String (
dateTimeStr) - 소스 시간대 ID인 String (
sourceZone) - 대상 시간대 ID인 String (
targetZone) - 출력에 시간대 오프셋을 포함할지 여부를 나타내는 boolean (
showOffset)
메서드는 다음 작업을 수행해야 합니다:
- 소스 시간대에서 입력 datetime을 파싱합니다
- 이를 대상 시간대로 변환합니다
- 두 시간에 대한 형식이 지정된 정보를 반환합니다
반환 메시지는 다음과 같아야 합니다:
- 유효하지 않은 datetime인 경우: "Invalid datetime format" 반환
- 유효하지 않은 시간대인 경우: "Invalid time zone" 반환
showOffset이 true인 경우: 출력에 오프셋을 포함하고xxx패턴으로 형식을 지정하여 오프셋이 0이면+00:00으로 출력합니다- 형식: "Source: [time1], Target: [time2]"
직접 해보기
import java.util.Scanner;
import java.time.*;
import java.time.format.*;
public class Main {
public static String convertTime(String dateTimeStr, String sourceZone,
String targetZone, boolean showOffset) {
// 여기에 코드를 작성하세요
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String dateTimeStr = scanner.nextLine();
String sourceZone = scanner.nextLine();
String targetZone = scanner.nextLine();
boolean showOffset = Boolean.parseBoolean(scanner.nextLine());
System.out.println(convertTime(dateTimeStr, sourceZone, targetZone, showOffset));
}
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리와 흐름의 모든 레슨
직접 연습해 보세요: 온라인 Java 컴파일러