Menu
CoddyTech

Penanganan Zona Waktu

Termasuk bagian Logika & Alur dalam perjalanan Java di Coddy. Pelajaran 59 dari 59.

ZonedDateTime di Java merepresentasikan tanggal dan waktu dengan zona waktu. Ini berguna saat kamu bekerja dengan zona waktu yang berbeda atau mengonversi di antaranya.

Buat waktu di zona tertentu:

ZonedDateTime tokyo = ZonedDateTime.now(ZoneId.of("Asia/Tokyo"));

Kamu juga bisa membuat ZonedDateTime dari LocalDateTime menggunakan .atZone():

LocalDateTime localDT = LocalDateTime.of(2024, 3, 15, 10, 30);
ZonedDateTime tokyo = localDT.atZone(ZoneId.of("Asia/Tokyo"));

Konversikan waktu antar zona:

ZonedDateTime newYork = tokyo.withZoneSameInstant(ZoneId.of("America/New_York"));

Setelah menjalankan kode di atas, newYork berisi waktu yang sama dengan tokyo, tetapi dalam zona waktu New York:

2024-03-14T21:30-04:00[America/New_York]
// Contoh output

Tokyo 13 jam lebih cepat daripada New York pada bulan Maret, jadi waktu yang sama jatuh pada hari kalender sebelumnya di New York.

Untuk memformat ZonedDateTime, gunakan DateTimeFormatter. Tambahkan offset dengan pola xxx: pola ini mencetak +09:00 atau -04:00, dan offset nol sebagai +00:00 (huruf besar XXX mencetak Z untuk offset nol):

// Tanpa offset
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
// Dengan offset (misalnya +09:00 atau -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm xxx");
String result = newYork.format(fmtWithOffset);
// Contoh: 2024-03-14 21:30 -04:00
challenge icon

Tantangan

Mudah

Buat method bernama convertTime yang menerima empat argumen:

  1. String (dateTimeStr) dengan format "yyyy-MM-dd HH:mm"
  2. String (sourceZone) ID zona waktu sumber
  3. String (targetZone) ID zona waktu target
  4. boolean (showOffset) yang menentukan apakah offset zona waktu disertakan dalam output

Method ini harus:

  1. Mengurai datetime input di zona waktu sumber
  2. Mengonversinya ke zona waktu target
  3. Mengembalikan informasi terformat tentang kedua waktu

Pesan yang dikembalikan harus:

  • Jika datetime tidak valid: kembalikan "Invalid datetime format"
  • Jika zona tidak valid: kembalikan "Invalid time zone"
  • Jika showOffset bernilai true: sertakan offset dalam output, dengan format pola xxx, sehingga offset nol ditampilkan sebagai +00:00
  • Format: "Source: [time1], Target: [time2]"

Coba sendiri

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) {
        // Tulis kodemu di sini
    }
    
    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));
    }
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Java online