Menu
Coddy logo textTech

Zaman Dilimi Yönetimi

Coddy'nin Java Journey'sinin Mantık & Akış bölümünün bir parçası — ders 59 / 59.

Java'daki ZonedDateTime, bir zaman dilimi ile birlikte bir tarih ve saati temsil eder. Farklı zaman dilimleriyle çalışırken veya bunlar arasında dönüşüm yaparken kullanışlıdır.

Belirli bir zaman diliminde bir zaman oluşturun:

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

Ayrıca .atZone() yöntemini kullanarak bir LocalDateTime nesnesinden ZonedDateTime oluşturabilirsiniz:

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

Zaman dilimleri arasında dönüşüm yapın:

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

Yukarıdaki kod yürütüldükten sonra, newYork, tokyo ile aynı anı içerir ancak New York'un saat dilimindedir:

2024-03-15T10:30-04:00[America/New_York]
// Örnek çıktı

Bir ZonedDateTime nesnesini biçimlendirmek için DateTimeFormatter kullanın. Çıktıya zaman dilimi ofsetini Z veya XXX desen harflerini kullanarak dahil edebilirsiniz:

// Ofset olmadan
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

// Ofset ile (örneğin +09:00 veya -04:00)
DateTimeFormatter fmtWithOffset = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm XXX");

String result = newYork.format(fmtWithOffset);
// Örnek: 2024-03-15 10:30 -04:00
challenge icon

Görev

Kolay

Dört argüman alan convertTime adında bir metot oluşturun:

  1. "yyyy-MM-dd HH:mm" formatında bir String (dateTimeStr)
  2. Kaynak zaman dilimi kimliği olan bir String (sourceZone)
  3. Hedef zaman dilimi kimliği olan bir String (targetZone)
  4. Çıktıda zaman dilimi farkının (offset) dahil edilip edilmeyeceğini belirten bir boolean (showOffset)

Metot şunları yapmalıdır:

  1. Giriş tarih ve saatini kaynak zaman diliminde ayrıştırın
  2. Bunu hedef zaman dilimine dönüştürün
  3. Her iki zaman hakkında biçimlendirilmiş bilgiyi döndürün

Dönüş mesajları şunlar olmalıdır:

  • Geçersiz tarih ve saat ise: "Invalid datetime format" döndürün
  • Geçersiz zaman dilimi ise: "Invalid time zone" döndürün
  • Eğer showOffset true ise: çıktıya farkı (offset) dahil edin
  • Format: "Source: [time1], Target: [time2]"

Kendin dene

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) {
        // Kodunuzu buraya yazın
    }
    
    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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Mantık & Akış bölümündeki tüm dersler