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 bekerja dengan zona waktu yang berbeda atau mengonversi di antara zona waktu tersebut.

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"));

Ubah waktu antar zona:

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

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

2024-03-15T10:30-04:00[America/New_York]
// Contoh output

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-15 10:30 -04:00
challenge icon

Tantangan

Mudah

Buat method bernama convertTime yang menerima empat argumen:

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

Method tersebut 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 berupa:

  • 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